无法将 DM 发送到 Message 到 DB discord.js 中存储的用户

问题描述

所以我制作了一个票证命令,当你说 .new 时,它会打开一个频道并存储 message.author,这样它就可以在你关闭它时给你发送一份成绩单。当我在数据库中记录 Console.log(message.author) 和存储的人时,message.author 在括号前有用户,而在数据库中没有。 db 也有更多的行,而 message.author 的行更少:

MEMBER:  {
  id: '708457617013342249',system: false,locale: null,flags: 128,username: 'chuli',bot: false,discriminator: '0001',avatar: 'a_483669232f603ee04c099c0449e8dc6a',lastMessageChannelID: '829491485866065971',createdTimestamp: 1588979858402,defaultAvatarURL: 'https://cdn.discordapp.com/embed/avatars/1.png',tag: 'chuli#0001',avatarURL: 'https://cdn.discordapp.com/avatars/708457617013342249/a_483669232f603ee04c099c0449e8dc6a.webp',displayAvatarURL: 'https://cdn.discordapp.com/avatars/708457617013342249/a_483669232f603ee04c099c0449e8dc6a.webp'
}
MESSAGE.AUTHOR User {
  id: '708457617013342249',flags: UserFlags { bitfield: 128 },lastMessageID: '842016982039134249',lastMessageChannelID: '841958995890667530'
}

所以我在尝试发送给存储的数据库用户时出错:

 member.send(pembed).catch()
       ^                                                

TypeError: member.send is not a function

我一直在为这个问题而头痛,所以我希望有人能回答这个问题!

解决方法

它们的行数不同的原因是因为它们是两种不同的东西。 message.authorUser,但存储在数据库中的是 GuildMemberWhat's the difference?

message.author 前面有 User 的原因是它是一个类。数据库中的内容最初是一个类,并且会在其前面使用 GuildMember 进行记录,但是不幸的是,您无法将类保留在 quick.db 中。你也不应该想要,因为它会占用大量的存储空间。 #send 之类的方法只能在 GuildMember 类上使用(相对于通过 quick.db 变成对象的 GuildMember 类),因此您无法从 db 中访问它.

相反,将用户 ID 存储在 db 中,因为它是唯一标识符,您可以从中获取用户,而无需在 db 中存储大量对象。您可以使用 client.users.fetch(id) 获取用户。

// await db.set('channel_id','author_id');

const id = await db.get('channel_id');
const user = await client.users.fetch(id);

user.send(...);
,

好的,感谢@Lionness100

这是我所做的

const memberid = db.fetch(`ticket_${message.channel.id}`)
            const user =  message.guild.members.cache.find(c=> c.id === memberid)

工作正常! :) 谢谢你们的帮助。