#python #discord #discord.py #discord.py-rewrite
#python #Discord #discord.py #discord.py-переписать
Вопрос:
Я новичок в discord.py и я застрял на этой ошибке. Я пытаюсь вызвать команду removerole позже в коде.
Эта первая часть работает нормально, я могу вводить в чате discord:
.ритм администратора removerole
И это работает, но я получаю сообщение об ошибке во второй части: 'str' object has no attribute 'remove_roles'
import discord
from discord.ext import commands
client = commands.Bot(command_prefix = '.')
@client.command()
async def removerole(ctx, role: discord.Role, member: discord.Member):
await member.remove_roles(role)
await ctx.send(f'Successfully removed {role.mention} from {member.mention}')
Я хочу ввести .removeRythm в чате, и бот удалит роль администратора из Rythm.
@client.command()
async def removeRythm():
await removerole(".remove", "admin", "Rythm")
Кто-нибудь знает, как это сделать, если это вообще возможно сделать?
Спасибо, МБ
Ответ №1:
Вы переходите в метод removerole 3 строки. ".remove", "admin", "Rythm"
. "Rythm"
это не объект discord, а Строка. Аннотации в Python не имеют смысла, и компилятор полностью игнорирует их. Таким образом, выделение member
типа discord.Member
фактически ничего не меняет, а только сбивает вас с толку.
Вместо этого вы должны передать в метод пользовательский объект discord.
Комментарии:
1. Это ложь. Discord.py использует подсказки типов в качестве преобразователей, например, пометка кого-либо (<@!xxxxxxxxx>) приведет его к соответствующему discord. Экземпляр участника, то же самое для ролей, каналов и т.д. Взгляните на документы API: discordpy.readthedocs.io/en/latest/ext/commands /…
Ответ №2:
Я изменил вот так, и теперь это работает
@client.command()
async def removeRythm():
await removerole(ctx, ctx.message.guild.get_role(779716603448787004), ctx.message.guild.get_member(235088799074484224))
Спасибо за помощь.