我正在尝试使用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
答案 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