Repository: Cog-Creators/Red-DiscordBot

Issue:
[Help] Let the user define how many time the reaction must disappear 
# Feature request

#### Select the type of feature you are requesting:

- [ ] Cog
- [X] Command
- [ ] API functionality

#### Describe your requested feature

Some of my users were complaining about how many time reactions disappear, thing that I understand since help command can be big depending the settings and cogs loaded.
It would be nice if the owner can set up this option.


Discussion:
It will be less of an issue when #4062 is merged as that will set the timeout to 3 minutes rather than 30 seconds.

but an option to customize help timeout would be nice indeed.
As discussed elsewhere with @Drapersniper , I'm aware of an issue with adding this setting currently that's intertwined with some other things that need further exploration before being put in the public eye.

Resolving patch:
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -115,6 +115,7 @@ def __init__(self, *args, cli_flags=None, bot_dir: Path = Path.cwd(), **kwargs):
             help__verify_exists=False,
             help__tagline="",
             help__use_tick=False,
+            help__react_timeout=30,
             description="Red V3",
             invite_public=False,
             invite_perm=0,
diff --git a/redbot/core/commands/help.py b/redbot/core/commands/help.py
--- a/redbot/core/commands/help.py
+++ b/redbot/core/commands/help.py
@@ -78,6 +78,7 @@ class HelpSettings:
     tagline: str = ""
     delete_delay: int = 0
     use_tick: bool = False
+    react_timeout: int = 30
 
     # Contrib Note: This is intentional to not accept the bot object
     # There are plans to allow guild and user specific help settings
@@ -131,6 +132,7 @@ def bool_transformer(val):
             "\nHelp shows unusable commands when asked directly: {verify_exists}"
             "\nDelete delay: {delete_delay}"
             "\nReact with a checkmark when help is sent via DM: {use_tick}"
+            "\nReaction timeout (only used if menus are used): {react_timeout} seconds"
             "{tagline_info}"
         ).format_map(data)
 
@@ -857,7 +859,9 @@ async def _delete_delay_help(
             m = await (ctx.send(embed=pages[0]) if embed else ctx.send(pages[0]))
             c = menus.DEFAULT_CONTROLS if len(pages) > 1 else {"\N{CROSS MARK}": menus.close_menu}
             # Allow other things to happen during menu timeout/interaction.
-            asyncio.create_task(menus.menu(ctx, pages, c, message=m))
+            asyncio.create_task(
+                menus.menu(ctx, pages, c, message=m, timeout=help_settings.react_timeout)
+            )
             # menu needs reactions added manually since we fed it a message
             menus.start_adding_reactions(m, c.keys())
 
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -3339,6 +3339,32 @@ async def helpset_deletedelay(self, ctx: commands.Context, seconds: int):
         else:
             await ctx.send(_("Done. The delete delay has been set to {} seconds.").format(seconds))
 
+    @helpset.command(name="reacttimeout")
+    async def helpset_reacttimeout(self, ctx: commands.Context, seconds: int):
+        """Set the timeout for reactions, if menus are enabled.
+
+        The default is 30 seconds.
+        The timeout has to be between 15 and 300 seconds.
+
+        **Examples:**
+            - `[p]helpset reacttimeout 30` - The default timeout.
+            - `[p]helpset reacttimeout 60` - Timeout of 1 minute.
+            - `[p]helpset reacttimeout 15` - Minimum allowed timeout.
+            - `[p]helpset reacttimeout 300` - Max allowed timeout (5 mins).
+
+        **Arguments:**
+            - `<seconds>` - The timeout, in seconds, of the reactions.
+        """
+        if seconds < 15:
+            await ctx.send(_("You must give a value of at least 15 seconds!"))
+            return
+        if seconds > 300:
+            await ctx.send(_("The timeout cannot be greater than 5 minutes!"))
+            return
+
+        await ctx.bot._config.help.react_timeout.set(seconds)
+        await ctx.send(_("Done. The reaction timeout has been set to {} seconds.").format(seconds))
+
     @helpset.command(name="tagline")
     async def helpset_tagline(self, ctx: commands.Context, *, tagline: str = None):
         """


Test patch: