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

Posted

技术标签:

【中文标题】无法将 DM 发送到消息到 DB discord.js 中的存储用户【英文标题】:Trouble sending DM to Message to stored user in DB discord.js 【发布时间】:2021-08-02 19:59:55 【问题描述】:

所以我发出了一个工单命令,当你说 .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

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

【问题讨论】:

您使用的是什么类型的数据库?您是否尝试将整个用户/成员对象存储在数据库中?您应该只存储他们的 ID,然后通过 client.members.fetch(id)client.users.fetch(id) 恢复缓存的成员/用户 【参考方案1】:

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

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

【讨论】:

这样做了,它仍然显示user.send(pembed) ^ TypeError: user.send is not a function 你能console.log用户吗?【参考方案2】:

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

这就是我所做的

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

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

【讨论】:

按 ID 搜索时使用 Collection#get() (members.cache.get(memberid))。另外,如果我的回答解决了您的问题,请将其标记为已接受,以便以后有相同问题的其他人更容易找到

以上是关于无法将 DM 发送到消息到 DB discord.js 中的存储用户的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py bot - 如何让机器人在 DM 中向我发送用户的消息?

创建一个组 DM Discord.js

discord.js 编辑发送给用户 dm 的消息

Discord.js - 发送消息的计数器,DM给公会的所有成员

在特定频道中重定向 Discord DM

向每个对 discord.js 中的消息做出反应的用户发送 dm