代码:
@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 机器人。
答案 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.*')
# ^