РЕДАКТИРОВАТЬ: решение найдено
Попробуйте изменить имена подкоманд на _enabled
и _disabled
и передать name="enabled"
name="disabled"
вкомандные декораторы.Это предположение, но иногда имена, которые Бот использует внутри, не работают должным образом, когда используются как имена команд. - Патрик Хау
Я попытался очистить немного кода и попытался внедрить подкоманды в модуль, но столкнулся с проблемой, которую, похоже, не могу решить.Во-первых, вот код:
@commands.group()
@commands.has_permissions(administrator=True)
async def autorole(self, ctx):
exists = dbinteraction.dbexec("SELECT role from autorole WHERE server_id = {}".format(ctx.guild.id))
if ctx.invoked_subcommand is None:
em = None
if (exists == None):
em = discord.Embed(title="Autorole is disabled for this guild.", color=discord.Color(0xff0000))
else:
em = discord.Embed(title="Autorole is enabled for this guild.", color = discord.Color(0x32ff00))
rol = discord.utils.get(ctx.guild.roles, id=exists)
em.add_field(name="Current role:", value=rol.mention)
await ctx.send(embed=em)
@autorole.command()
@commands.has_permissions(administrator=True)
async def enabled(self, ctx, role: discord.Role=None):
"""Defines a role that will be applied to all new members, format: autorole (enabled/disabled) [role]"""
exists = dbinteraction.dbexec("SELECT role from autorole WHERE server_id = {}".format(ctx.guild.id))
print('status, role : {} {}'.format("enabled", role.id))
try:
if role==None:
await ctx.send("No role provided")
else:
if (exists!=None):
dbinteraction.dbexec("UPDATE autorole SET role = {}".format(role.id))
else:
dbinteraction.dbexec("INSERT INTO autorole VALUES({},{})".format(ctx.guild.id, role.id))
em = discord.Embed(title="", color= discord.Color(0x32ff00))
em.add_field(name="Autorole enabled", value="Current role: {}".format(role.mention))
await ctx.send(embed=em)
except (Exception) as e:
print(e)
@autorole.command()
@commands.has_permissions(administrator=True)
async def disabled(self, ctx, role: discord.Role=None):
exists = dbinteraction.dbexec("SELECT role from autorole WHERE server_id = {}".format(ctx.guild.id))
print('disab')
if(exists!=None):
dbinteraction.dbexec("DELETE FROM autorole WHERE server_id = {}".format(ctx.server.id))
await ctx.send("Autorole disabled")
Независимо от того, что я пробовал, следующий бит кода всегда выполняет команду по умолчанию (тот, что после if ctx.invoked_subcommand is None:
), Я использую перезапись