无法向特定频道发送消息
Can't send a message to a specific channel
我正在尝试创建一个 modmail 系统,每当我尝试创建它时,它都会说“channel.send 不是函数,这是我的代码。”
const Discord = require("discord.js")
const client = new Discord.Client()
const db = require('quick.db')
// ...
client.on('message', message => {
if(db.fetch(`ticket-${message.author.id}`)){
if(message.channel.type == "dm"){
const channel = client.channels.cache.get(id => id.name == `ticket-${message.author.id}`)
channel.send(message.content)
}
}
})
// ...
client.login("MYTOKEN")
我正在尝试使用 12.0.0 版本
编辑:
我发现了我的问题,出于某种原因,保存的 ID 是机器人 ID,而不是我的 ID
您正试图通过函数找到它。改用 .find
:
const channel = client.channels.cache.find(id => id.name == `ticket-${message.author.id}`)
正如 MrMythical 所说,您应该使用 find
函数而不是 get
。我认为问题在于您正在获取非文本频道,因为 channel
已定义,您无法向其发送任何内容。
您可以通过添加额外的捕获来解决此问题,以确保您获得的是文本频道,而不是类别或语音频道。如果 channel
未定义,我也会 return
(或发出各种错误消息)。
Discord.js v12:
const channel = client.channels.cache.find(c => c.name === `ticket-${message.author.id}` && c.type === 'text');
Discord.js v13:
const channel = client.channels.cache.find(c => c.name === `ticket-${message.author.id}` && c.type === 'GUILD_TEXT');
编辑:
您可以看出 channel
已定义,因为如果未定义,它会说出类似以下内容的内容:Cannot read property 'send' of undefined
.
我正在尝试创建一个 modmail 系统,每当我尝试创建它时,它都会说“channel.send 不是函数,这是我的代码。”
const Discord = require("discord.js")
const client = new Discord.Client()
const db = require('quick.db')
// ...
client.on('message', message => {
if(db.fetch(`ticket-${message.author.id}`)){
if(message.channel.type == "dm"){
const channel = client.channels.cache.get(id => id.name == `ticket-${message.author.id}`)
channel.send(message.content)
}
}
})
// ...
client.login("MYTOKEN")
我正在尝试使用 12.0.0 版本
编辑: 我发现了我的问题,出于某种原因,保存的 ID 是机器人 ID,而不是我的 ID
您正试图通过函数找到它。改用 .find
:
const channel = client.channels.cache.find(id => id.name == `ticket-${message.author.id}`)
正如 MrMythical 所说,您应该使用 find
函数而不是 get
。我认为问题在于您正在获取非文本频道,因为 channel
已定义,您无法向其发送任何内容。
您可以通过添加额外的捕获来解决此问题,以确保您获得的是文本频道,而不是类别或语音频道。如果 channel
未定义,我也会 return
(或发出各种错误消息)。
Discord.js v12:
const channel = client.channels.cache.find(c => c.name === `ticket-${message.author.id}` && c.type === 'text');
Discord.js v13:
const channel = client.channels.cache.find(c => c.name === `ticket-${message.author.id}` && c.type === 'GUILD_TEXT');
编辑:
您可以看出 channel
已定义,因为如果未定义,它会说出类似以下内容的内容:Cannot read property 'send' of undefined
.