为了账号安全,请及时绑定邮箱和手机立即绑定

我不明白我在使用 on_member_join/on_member_remove

我不明白我在使用 on_member_join/on_member_remove

开心每一天1111 2021-10-10 14:23:51
我一直在研究用 python 编码的不和谐机器人。当用户加入服务器并离开服务器时,我一直试图让我的机器人说出一条消息。但是当我测试它时,我得到了 2 个错误,我不明白这些错误。而且我不确定我做错了什么。如果有人可以帮助解释这些错误,并为我的代码指出正确的方向,我将不胜感激。我研究了discord rewrite api,并与朋友在我的服务器中对其进行了测试,当时我遇到了错误@client.eventasync def on_member_join(member):    channel = member.server.get_channel("499457708978864151")    msg = 'Welcome to the {1.name} Server, {0.mention}'    await client.say(channel, msg.format(member, member.server))@client.eventasync def on_member_remove(member):    channel = member.server.get_channel("499457708978864151")    msg = '{0.mention} has left the server'    await client.say((channel, msg.format(member, member.server)))我希望我的机器人在他们进入服务器时说欢迎使用(服务器的名称)服务器,@username,当用户离开时@username 已经离开服务器,但我收到了这些错误:TypeError: send_message() takes from 2 to 3 positional arguments but 4 were givendiscord.errors.InvalidArgument: Destination must be Channel, PrivateChannel, User, or Object. Received NoneType这是我的完整追溯Ignoring exception in on_member_joinTraceback (most recent call last):  File "C:\Users\Chris\PycharmProjects\untitled1\venv\lib\site-packages\discord\client.py", line 307, in _run_event    yield from getattr(self, event)(*args, **kwargs)  File "C:/Users/Chris/PycharmProjects/untitled1/RomaniBot.py", line 37, in on_member_join    await client.say(channel, msg.format(member, member.server))  File "C:\Users\Chris\PycharmProjects\untitled1\venv\lib\site-packages\discord\ext\commands\bot.py", line 350, in say    coro = self.send_message(destination, *args, **kwargs)TypeError: send_message() takes from 2 to 3 positional arguments but 4 were givenIgnoring exception in on_member_removeTraceback (most recent call last):
查看完整描述

2 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您的代码的一种简单修复方法是使用 ,而不是client.say使用channel.send。所以


@client.event

async def on_member_join(member):

    channel = member.server.get_channel(499457708978864151)

    msg = 'Welcome to the {1.name} Server, {0.mention}'

    await channel.send(msg.format(member, member.server))

此外,根据文档,


get_channel(id)


返回具有以下 ID 的 abc.GuildChannel 或 abc.PrivateChannel。


如果未找到,则返回 None。


所以你没有成功选择频道。原因是 rewrite 中的 ID 是int,而不是字符串。


查看完整回答
反对 回复 2021-10-10
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

member.server向您返回成员加入的服务器。并且您尝试使用 ID 访问频道499457708978864151,这肯定不会在频道使用 ID 所在的服务器之外的其他服务器中工作499457708978864151,因此您也必须让服务器client.get_server("ID")执行此操作。


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信