问题描述
所以我制作了一个票证命令,当你说 .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.author
是 User
,但存储在数据库中的是 GuildMember
。 What'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)
工作正常! :) 谢谢你们的帮助。