无法将 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)
工作正常! :) 感谢您的帮助。
所以我正在发出票证命令,当你说 .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)
工作正常! :) 感谢您的帮助。