无法将 DM 发送到消息到数据库中存储的用户 discord.js

Trouble sending DM to Message to stored user in DB discord.js

所以我正在发出票证命令,当你说 .new 时,它会打开一个频道并存储 message.author,这样它可以在你关闭它时向你发送一份文字记录。当我记录 Console.log(message.author) 和数据库中存储的人时,message.author 在括号前有用户,而在数据库中没有。数据库也有更多的行,而 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

我一直在为此伤脑筋,所以我希望有人知道这个问题的答案!

他们有不同行数的原因是因为他们是两个不同的东西。 message.author 是一个 User, but what's stored in the db is a GuildMember.

message.author 前面有 User 的原因是它是 class。数据库中的内容 最初是 一个 class,并且会在其前面使用 GuildMember 进行记录,但不幸的是,您无法保留 class quick.db 中的 es。您也不应该这样做,因为它会占用大量存储空间。 #send 等方法仅在 GuildMember class 上可用(相对于 GuildMember class 由 quick.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(...);

好的,感谢@Lioness100

,我修好了

这是我做的

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

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