Discordia bot DM 发送打破了我的脚本

我正在使用Discordia为我的Discord服务器创建一个机器人,但是当我尝试使用member:send(str)时,我得到的全部是未捕获的错误:C:/luvit/deps/coro-channel.lua:62: C:/luvit/deps/discordia/libs/containers/User.lua:91: attempt to call method 'getPrivateChannel' (a nil value) 它确实发送了DM,但是代码崩溃了,机器人不再运行,我该如何解决?

member是从消息中获取成员的变量

local member = message.member

点赞
用户12514997
用户12514997

我能够重现这个问题,尽管我遇到了不同的错误,我怀疑这是因为我没有你所有的代码进行调试。 机器人将发送直接消息并且发布一条消息,然后因为错误而崩溃。 你有这样的代码:

if message.content:lower() == prefix..'createdm' then
      message.channel:send("<@!"..memberid.."> ".. "Sent!")
      message.member:send("test") --message.member is able to inherit the send method from message.author
end

我不知道你是如何找到 memberid 的,所以我这样定义它: memberid = message.member:__hash() 每次发送一条消息时都会调用它并发送一条消息。这意味着机器人将调用它并阅读自己的消息。虽然机器人不会继续进入 if 语句,因为它的消息不是 '<prefix>createdm',但它仍然会尝试获取 memberid 并评估 if 语句。我不知道机器人用户在他们的帐户元数据方面与人类用户有什么不同,但我强烈怀疑存在某些差异,这就是你的问题。

我相信在你的代码中添加这个,在你评估消息的任何其他内容之前,在消息回调的开头将修复你的问题。

if message.author == client.user then
   return
end

client 这里是你分配给 discordia.Client() 的任何内容。

2020-09-02 18:14:59
用户15832266
用户15832266
如果消息内容转化为小写后等于前缀加上 'createdm',则执行以下操作:

message.channel:send("<@!"..memberid.."> ".. "已发送!") -- member.id !!!
message.member:send("测试") -- message.member 能够继承 message.author 的 send 方法
2021-05-04 11:50:28