From ce2cd9beb2a085819da6fc0f4324330850091efc Mon Sep 17 00:00:00 2001 From: movsesyanpv Date: Sun, 23 Oct 2022 20:43:44 +0300 Subject: [PATCH 1/4] Switched RoleLFG to MentionableSelect --- cogs/utils/views.py | 22 ++++++++++++++++------ requirements.txt | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/cogs/utils/views.py b/cogs/utils/views.py index 476c5adc..78c3c6d5 100644 --- a/cogs/utils/views.py +++ b/cogs/utils/views.py @@ -77,6 +77,18 @@ async def callback(self, interaction: discord.Interaction): self.view.stop() +class MentionableSelect(discord.ui.MentionableSelect): + def __init__(self, max_values, row=1): + super().__init__(max_values=max_values, row=row) + + async def callback(self, interaction: discord.Interaction): + await interaction.response.defer() + self.view.value = [] + for selected in self.values: + self.view.value.append(selected) + self.view.stop() + + class ConfirmView(discord.ui.View): def __init__(self, cancel_line, owner, confirm='Confirm', cancel='Cancel'): super().__init__() @@ -135,7 +147,7 @@ def __init__(self, max_val, options, owner, is_edit=False, manual='Enter manuall no_change='nochange', response_line='Enter names of the roles', has_custom=True): super().__init__() self.owner = owner - self.select = MySelect(min_values=1, max_values=max_val, options=options, row=1) + self.select = MentionableSelect(max_values=25, row=1) if has_custom: self.custom_button = MyButton(type='custom', label=manual, style=discord.ButtonStyle.gray, row=2, response_line=response_line) @@ -553,7 +565,7 @@ async def callback(self, interaction: discord.Interaction): await interaction.edit_original_message(content=translations['role'], view=view) await view.wait() if view.value is None: - await interaction.edit_original_message(content='Timed out') + await interaction.edit_original_message(content='Timed out', view=None) return False elif view.value in ['-']: role = '-' @@ -571,11 +583,9 @@ async def callback(self, interaction: discord.Interaction): pass else: role = '' - self.roles = [] - for role_id in view.value: + self.roles = view.value + for role_obj in view.value: try: - role_obj = interaction.guild.get_role(int(role_id)) - self.roles.append(role_obj) role = '{} {};'.format(role, role_obj.name) except ValueError: pass diff --git a/requirements.txt b/requirements.txt index 6568f8db..0963970b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ typed-ast<2.0 urllib3>=1.24.2 Werkzeug>=0.15.3 wrapt==1.10.11 -py-cord[speed]==2.0.1 +git+https://github.com/plun1331/pycord@selects-v2 pydest>=0.6 bs4 apscheduler From dcb0031c4e05bd76e17d6b4630fc985ee5f5bad7 Mon Sep 17 00:00:00 2001 From: movsesyanpv Date: Fri, 4 Nov 2022 20:03:13 +0300 Subject: [PATCH 2/4] Updated the code for the latest pycord --- cogs/serveradmin.py | 26 +++++++++---------- cogs/utils/views.py | 62 ++++++++++++++++++++++----------------------- requirements.txt | 2 +- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/cogs/serveradmin.py b/cogs/serveradmin.py index 0d04232f..c4063517 100644 --- a/cogs/serveradmin.py +++ b/cogs/serveradmin.py @@ -36,7 +36,7 @@ async def remove(self, ctx): await ctx.defer(ephemeral=True) lang = await locale_2_lang(ctx) await ctx.bot.remove_channel(ctx.channel.id) - await ctx.interaction.edit_original_message(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) + await ctx.interaction.edit_original_response(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) @staticmethod async def post_selection(ctx, registration=False): @@ -80,7 +80,7 @@ async def post_selection(ctx, registration=False): notifiers.append(ch[0]) if not list(set(notifiers).intersection(channels)): - await ctx.interaction.edit_original_message( + await ctx.interaction.edit_original_response( content=ctx.bot.translations[lang]['msg']['no_regular_reg'], view=None) await data_cursor.close() return 0 @@ -91,12 +91,12 @@ async def post_selection(ctx, registration=False): args = view.value if args is None: - await ctx.interaction.edit_original_message( + await ctx.interaction.edit_original_response( content=ctx.bot.translations[lang]['msg']['timed_out'], view=None) await data_cursor.close() return 1 if args == 'cancel': - await ctx.interaction.edit_original_message( + await ctx.interaction.edit_original_response( content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) await data_cursor.close() return -1 @@ -132,7 +132,7 @@ async def settings(self, ctx): status = await self.post_selection(ctx) if status is None: - await ctx.interaction.edit_original_message(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) + await ctx.interaction.edit_original_response(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) @register.command( description='Make the bot start posting rotation updates in this channel', @@ -148,7 +148,7 @@ async def rotations(self, ctx): await self.post_selection(ctx, True) - await ctx.interaction.edit_original_message(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) + await ctx.interaction.edit_original_response(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) await ctx.bot.force_update(['daily', 'weekly'], get=False, channels=[ctx.channel.id], forceget=False) return @@ -163,7 +163,7 @@ async def changelogs(self, ctx): if not await message_permissions(ctx, lang): return await ctx.bot.register_channel(ctx, 'updates') - await ctx.interaction.edit_original_message(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) + await ctx.interaction.edit_original_response(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) return @slash_command(name='lfgcleanup', @@ -211,7 +211,7 @@ async def sl_rmnotifier(self, ctx): if not await message_permissions(ctx, lang): return await ctx.bot.remove_channel(ctx.channel.id) - await ctx.interaction.edit_original_message(content=ctx.bot.translations[lang]['msg']['command_is_done'], + await ctx.interaction.edit_original_response(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) @slash_command( @@ -237,7 +237,7 @@ async def sl_setlang(self, ctx): await data_cursor.close() if ctx.guild.me.guild_permissions.change_nickname: await ctx.guild.me.edit(nick=ctx.bot.translations[args[0].lower()]['nick'], reason='language change') - await ctx.interaction.edit_original_message(content=msg, view=None) + await ctx.interaction.edit_original_response(content=msg, view=None) @slash_command(name='setclan', description='Set a Destiny 2 clan for the server', @@ -393,7 +393,7 @@ async def sl_update(self, ctx): args = view.value if args is None: - await ctx.interaction.edit_original_message( + await ctx.interaction.edit_original_response( content=ctx.bot.translations[lang]['msg']['timed_out'], view=None) return @@ -408,14 +408,14 @@ async def sl_update(self, ctx): regular_types = ctx.bot.all_types.copy() if not list(set(notifiers).intersection(channels)): if list(set(regular_types).intersection(args)): - await ctx.interaction.edit_original_message(content=ctx.bot.translations[lang]['msg']['no_regular_reg'], view=None) + await ctx.interaction.edit_original_response(content=ctx.bot.translations[lang]['msg']['no_regular_reg'], view=None) await data_cursor.close() return else: if list(set(regular_types).intersection(args)): correct_ch = True await ctx.bot.force_update(args, get=get, channels=channels, forceget=get) - await ctx.interaction.edit_original_message(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) + await ctx.interaction.edit_original_response(content=ctx.bot.translations[lang]['msg']['command_is_done'], view=None) await data_cursor.close() return @@ -443,7 +443,7 @@ async def lfgreminder(self, ctx, enable: Option(bool, "Enable or disable LFG ale pass await guild_cursor.close() - await ctx.interaction.edit_original_message(content=ctx.bot.translations[lang]['msg']['command_is_done']) + await ctx.interaction.edit_original_response(content=ctx.bot.translations[lang]['msg']['command_is_done']) # @commands.slash_command( # description='Register the channel as a place for LFG posts', diff --git a/cogs/utils/views.py b/cogs/utils/views.py index 78c3c6d5..75192e7e 100644 --- a/cogs/utils/views.py +++ b/cogs/utils/views.py @@ -17,11 +17,11 @@ async def callback(self, interaction: discord.Interaction): # if interaction.user != self.view.owner: # return if self.button_type == 'confirm': - await interaction.edit_original_message(content='OK', embed=None, view=None) + await interaction.edit_original_response(content='OK', embed=None, view=None) self.view.value = True self.view.stop() elif self.button_type == 'cancel': - await interaction.edit_original_message(content=self.view.cancel_line, embed=None, view=None) + await interaction.edit_original_response(content=self.view.cancel_line, embed=None, view=None) self.view.value = False self.view.stop() elif self.button_type == 'raid': @@ -50,7 +50,7 @@ async def callback(self, interaction: discord.Interaction): self.view.stop() elif self.button_type == 'custom': self.view.value = 'custom' - await interaction.edit_original_message(content=self.response_line) + await interaction.edit_original_response(content=self.response_line) self.view.stop() elif self.button_type == 'all_upd_types': self.view.value = 'all' @@ -77,9 +77,9 @@ async def callback(self, interaction: discord.Interaction): self.view.stop() -class MentionableSelect(discord.ui.MentionableSelect): +class MentionableSelect(discord.ui.Select): def __init__(self, max_values, row=1): - super().__init__(max_values=max_values, row=row) + super().__init__(select_type=discord.enums.ComponentType.mentionable_select, max_values=max_values, row=row) async def callback(self, interaction: discord.Interaction): await interaction.response.defer() @@ -143,11 +143,11 @@ def __init__(self, bot_id, support_label='Support', invite_label='Invite me'): class RoleLFG(discord.ui.View): - def __init__(self, max_val, options, owner, is_edit=False, manual='Enter manually', auto='Automatic', + def __init__(self, max_val, owner, is_edit=False, manual='Enter manually', auto='Automatic', no_change='nochange', response_line='Enter names of the roles', has_custom=True): super().__init__() self.owner = owner - self.select = MentionableSelect(max_values=25, row=1) + self.select = MentionableSelect(max_values=max_val, row=1) if has_custom: self.custom_button = MyButton(type='custom', label=manual, style=discord.ButtonStyle.gray, row=2, response_line=response_line) @@ -450,7 +450,7 @@ async def on_error(self, error: Exception, interaction: discord.Interaction) -> bot_info = await self.bot_loc.bot.application_info() locale = await locale_2_lang(self.bot_loc) if isinstance(error, OverflowError): - await interaction.edit_original_message(content=self.bot_loc.bot.translations[locale]['overflow_error'], view=None) + await interaction.edit_original_response(content=self.bot_loc.bot.translations[locale]['overflow_error'], view=None) return owner = bot_info.owner if owner.dm_channel is None: @@ -464,7 +464,7 @@ async def on_error(self, error: Exception, interaction: discord.Interaction) -> self.bot_loc.bot.logger.exception(traceback_str) command_line = '/lfg is_edit:{}'.format(self.is_edit) await owner.dm_channel.send('{}:\n{}'.format(interaction.user, command_line)) - await interaction.edit_original_message(content=self.bot_loc.bot.translations[locale]['error'], view=None) + await interaction.edit_original_response(content=self.bot_loc.bot.translations[locale]['error'], view=None) values = self.children self.bot_loc.bot.logger.info('Role LFG: \nname={}\ndescription={}\ntime={}\nsize={}\nlength={}\na_type={}\n' 'mode={}\nroles={}'. @@ -534,38 +534,38 @@ async def callback(self, interaction: discord.Interaction): await interaction.response.send_message(content=translations['type'], view=view, ephemeral=True) await view.wait() if view.value is None: - await interaction.edit_original_message(content='Timed out') + await interaction.edit_original_response(content='Timed out') return self.a_type = view.value view = ModeLFG(interaction.user, self.is_edit, basic=translations['basic_mode'], manual=translations['manual_mode'], no_change=translations['button_no_change']) - await interaction.edit_original_message( + await interaction.edit_original_response( content=translations['mode'].format(translations['manual_mode'], translations['basic_mode']), view=view) await view.wait() if view.value is None: - await interaction.edit_original_message(content='Timed out') + await interaction.edit_original_response(content='Timed out') return self.mode = view.value - role_list = [] - for role in interaction.guild.roles: - if role.mentionable and not role.managed: - role_list.append(discord.SelectOption(label=role.name, value=str(role.id))) - if len(role_list) > 25: - role_list = role_list[:25] - if len(role_list) == 0: - view.value = '-' - else: - view = RoleLFG(len(role_list), role_list, interaction.user, self.is_edit, - manual=translations['manual_roles'], - auto=translations['auto_roles'], has_custom=False, - no_change=translations['button_no_change']) - await interaction.edit_original_message(content=translations['role'], view=view) - await view.wait() + # role_list = [] + # for role in interaction.guild.roles: + # if role.mentionable and not role.managed: + # role_list.append(discord.SelectOption(label=role.name, value=str(role.id))) + # if len(role_list) > 25: + # role_list = role_list[:25] + # if len(role_list) == 0: + # view.value = '-' + # else: + view = RoleLFG(25, interaction.user, self.is_edit, + manual=translations['manual_roles'], + auto=translations['auto_roles'], has_custom=False, + no_change=translations['button_no_change']) + await interaction.edit_original_response(content=translations['role'], view=view) + await view.wait() if view.value is None: - await interaction.edit_original_message(content='Timed out', view=None) + await interaction.edit_original_response(content='Timed out', view=None) return False elif view.value in ['-']: role = '-' @@ -595,7 +595,7 @@ async def callback(self, interaction: discord.Interaction): role = role[:-1] values = self.children - await interaction.edit_original_message(content=translations['processing'], view=None) + await interaction.edit_original_response(content=translations['processing'], view=None) if self.is_edit: button_inputs = await self.validate_edits(self.a_type, self.mode, self.roles, role) else: @@ -625,11 +625,11 @@ async def callback(self, interaction: discord.Interaction): args['timezone']) ) - await interaction.edit_original_message(content=check_msg, embed=check_embed, view=view) + await interaction.edit_original_response(content=check_msg, embed=check_embed, view=view) await view.wait() if view.value is None: - await interaction.edit_original_message(content='Timed out') + await interaction.edit_original_response(content='Timed out') return elif not view.value: return diff --git a/requirements.txt b/requirements.txt index 0963970b..50f1b402 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ typed-ast<2.0 urllib3>=1.24.2 Werkzeug>=0.15.3 wrapt==1.10.11 -git+https://github.com/plun1331/pycord@selects-v2 +git+https://github.com/Pycord-Development/pycord pydest>=0.6 bs4 apscheduler From ef4def7754d4ddbb7ac9b81882f23195bf4b19dd Mon Sep 17 00:00:00 2001 From: movsesyanpv Date: Thu, 24 Nov 2022 12:41:17 +0300 Subject: [PATCH 3/4] Updated requirements.txt --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 50f1b402..f623be77 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ typed-ast<2.0 urllib3>=1.24.2 Werkzeug>=0.15.3 wrapt==1.10.11 -git+https://github.com/Pycord-Development/pycord +py-cord[speed]==2.3.0 pydest>=0.6 bs4 apscheduler From 8ac6028ee2242c51e9e924fd67d5552f74c5bcfb Mon Sep 17 00:00:00 2001 From: movsesyanpv Date: Thu, 24 Nov 2022 13:12:21 +0300 Subject: [PATCH 4/4] Minor fixes --- cogs/serveradmin.py | 16 ++++++++-------- cogs/utils/views.py | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cogs/serveradmin.py b/cogs/serveradmin.py index 8e66aa65..12206792 100644 --- a/cogs/serveradmin.py +++ b/cogs/serveradmin.py @@ -234,15 +234,15 @@ async def sl_setlang(self, ctx): await view.wait() args = view.value + if args is not None: + data_cursor = await ctx.bot.guild_db.cursor() + await data_cursor.execute('''UPDATE language SET lang=? WHERE server_id=?''', + (args[0].lower(), ctx.guild.id)) + await ctx.bot.guild_db.commit() + await data_cursor.close() + if ctx.guild.me.guild_permissions.change_nickname: + await ctx.guild.me.edit(nick=ctx.bot.translations[args[0].lower()]['nick'], reason='language change') msg = ctx.bot.translations[lang]['msg']['command_is_done'] - - data_cursor = await ctx.bot.guild_db.cursor() - await data_cursor.execute('''UPDATE language SET lang=? WHERE server_id=?''', - (args[0].lower(), ctx.guild.id)) - await ctx.bot.guild_db.commit() - await data_cursor.close() - if ctx.guild.me.guild_permissions.change_nickname: - await ctx.guild.me.edit(nick=ctx.bot.translations[args[0].lower()]['nick'], reason='language change') await ctx.interaction.edit_original_response(content=msg, view=None) @set.command(name='clan', diff --git a/cogs/utils/views.py b/cogs/utils/views.py index 594a50f9..b8ad4c22 100644 --- a/cogs/utils/views.py +++ b/cogs/utils/views.py @@ -643,7 +643,7 @@ async def callback(self, interaction: discord.Interaction): await view.wait() if view.value is None: - await interaction.edit_original_response(content='Timed out') + await interaction.edit_original_response(content='Timed out', view=None, embed=None) return elif not view.value: return