无法将 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.author
是 User
,但存储在数据库中的是 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 中向我发送用户的消息?