0

所以我发出了一个工单命令,当你说 .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',
  system: false,
  locale: null,
  flags: UserFlags { bitfield: 128 },
  username: 'chuli',
  bot: false,
  discriminator: '0001',
  avatar: 'a_483669232f603ee04c099c0449e8dc6a',
  lastMessageID: '842016982039134249',
  lastMessageChannelID: '841958995890667530'
}

因此,在尝试发送给存储的数据库用户时出现错误:

 member.send(pembed).catch()
       ^                                                

TypeError: member.send is not a function

我一直在为此烦恼,所以我希望有人能回答这个问题!

4

2 回答 2

0

它们具有不同数量的行的原因是因为它们是两个不同的东西。message.author是 a User,但存储在数据库中的是 a GuildMember有什么不同?

前面的原因是message.authorUser是一个类。db 中的内容最初是一个类,并且会GuildMember在它前面记录,但是不幸的是,您不能将类保留在quick.db. 您也不应该这样做,因为它会占用大量的存储空间。诸如此类的方法#send仅在GuildMember类上可用(与GuildMember通过 quick.db 将类转换为对象相反),因此您无法从 db 访问它。

相反,将用户 ID 存储在数据库中,因为它是唯一标识符,您可以从中获取用户,而无需在数据库中存储大量对象。您可以使用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(...);
于 2021-05-12T12:55:21.843 回答
0

好的,感谢@Lioness100,我修好了

这是我所做的

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

工作正常!:) 感谢您的帮助。

于 2021-05-12T13:23:49.027 回答