为什么我的 Discord 机器人不添加角色或响应任何错误?

时间:2021-07-04 23:56:16

标签: python discord.py

代码:

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    elif message.content.startswith(commandPrefix + 'afk'):
        role = discord.utils.get(message.guild.roles, name="afk")
        try:
            await Member.add_roles(role)
            await message.channel.send('*' + str(message.author) + ' is now AFK.*')
        except discord.Forbidden:
            await client.send_message("FIREBOT \n Something went wrong! \n [ERR AFKForbidden]")
            print("FIREBOT \n Something went wrong! \n [ERR AFKForbidden] \n ====================")

返回: Fire bot:MrHallway0#4864 现在是 AFK。没有添加角色 afk。我曾尝试使用 client.add_role,但也没有用。

很抱歉,我刚开始使用 discord.py 制作 Discord 机器人。

1 个答案:

答案 0 :(得分:0)

如果你想 add_roles 到一个成员 (discord.Member) 你必须使用像 message.author 这样的成员而不是类 Member

# use the command/message author
await message.author.add_roles(role)

# or get another member
member = message.guild.get_member(1234) # 1234 must be a valid user id
await member.add_roles(role)

没有错误消息,因为您使用 try: except: 块“阻止了它”,并且 discord.Forbidden 不是您在 await Member.add_roles(role) 行中会出现的错误 使用 except Exception as e: 您可以排除所有其他错误,e 只是一个变量名

try:
    pass # do stuff here
except discord.Forbidden:
    print(f"FIREBOT\n Something went wrong!\n [ ERR AFKForbidden ] \n====================")
except Exception as e: # every other error
    print(f"FIREBOT\n Something went wrong!\n [ {e} ] \n====================")

您可以使用 f-strings 更轻松地格式化分析器。只需在字符串 (f) 前面添加一个 f'message',然后您就可以在 {} 中插入变量,如 f'hello {name}'

>>> name = 'Guddi'
>>> print(f'Hello {name}!')
Hello Guddi!

在你的情况下:

# change this
await message.channel.send('*' + str(message.author) + ' is now AFK.*')
#to this
await message.channel.send(f'* {message.author} is now AFK.*')
#                          ^