Discordia bot DM发送中断了我的脚本

时间:2020-09-01 18:39:06

标签: lua discord luvit

我正在尝试使用Discordia在不和谐的服务器上制作机器人,但是当我尝试使用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,但随后代码中断,并且该bot无法再运行了,我该如何解决?

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

local member = message.member

2 个答案:

答案 0 :(得分:0)

我能够重现该问题,尽管我怀疑是由于我没有调试所有代码而导致的另一个错误。 该机器人将发送DM并发布消息,然后由于错误而崩溃。 您有以下代码:

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

我不知道您如何找到会员ID,所以我这样定义它: memberid = message.member:__hash() 每次发送消息时都会调用它,并且它会发送一条消息。这意味着该机器人将调用此函数并阅读其自身的消息。尽管由于其消息不是<prefix>createdm,机器人不会继续进入if语句,但它仍将尝试获取memberid并评估if语句。我不知道漫游器用户在帐户元数据方面与人类用户有何不同,但我强烈怀疑这有一定的区别,这是您的问题。

我相信将其添加到代码中,在消息回调的开头(在执行其他操作以评估消息之前)会解决您的问题。

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

client就是您为discordia.Client()分配的内容。

答案 1 :(得分:0)

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