Как можно вызвать функцию в discord.py

#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))
 

Спасибо за помощь.