discord.js 正在向特定频道发送消息
discord.js sending message to specific channel
我一直在四处寻找,似乎无法找到我使用 Typescript 制作的不和谐机器人遇到的这个问题的答案。我将所有命令都放在它们自己的文件夹中,每个命令都使用一个单独的文件。有助于让事情井井有条。
我看到有人说client.channels.get(`channelID`).send(`Text`)
但这给了我
Object is possibly 'undefined'.
和 Property 'send' does not exist on type 'Channel'.
实际上,每当有人运行重启命令时,我都会尝试在每个文本频道(从列表中给出)发送一条机器人消息,因为无论出于何种原因,人们都会不断重启机器人。如果有人需要使用它,我会时不时地把它作为一个有趣的事情来实现。机器人离线 3 分钟,但我不喜欢人们向它发送垃圾邮件,而且几乎无法使用机器人。
我正在使用 client.channels.get(channels.channelnames[5]).send("This is a message.")
根据https://discord.js.org/#/docs/main/stable/class/Collection看来好像没有get方法。
尝试client.channels[channels.channelnames[5]].send("This is a message.")
换句话说,尝试用方括号替换.get。
编辑:对不起,我有点快,我认为问题是类型转换,如果你知道它是一个文本频道,请尝试将 Channel
转换为 TextChannel
。
假设您的频道是文本频道,这应该有效。
client.on('ready',(e)=>{
let channel_ids = ['123','456','789'];
// loop through the list of channel ids.
for(let i=0, l=channel_ids.length; i<l; i++){
let channel_id = channel_ids[i];
let this_channel = client.channels.get( channel_id );
// if exists, and type in list send message
if(this_channel && ['dm', 'group', 'text'].indexOf( this_channel.type ) != -1){
this_channel.send('a cool message')
.then(message => console.log(`Sent message: ${message.content}`))
.catch(console.error);
}
}
});
解决方案:
if(msgObject.member.guild.channels.find(channel => channel.name === channels.channelnames[5]) as Discord.TextChannel) {
var txtchannel = msgObject.member.guild.channels.find(channel => channel.name === channels.channelnames[5]) as Discord.TextChannel
txtchannel.send("This is a message in a channel. Don't know why you read this.")
}
所以我基本上是在正确的轨道上。只需要做 as Discord.TextChannel
我认为这就是为什么 Cynthia 说要将变量转换为 TextChannel
此代码有效。感谢大家的帮助!
我一直在四处寻找,似乎无法找到我使用 Typescript 制作的不和谐机器人遇到的这个问题的答案。我将所有命令都放在它们自己的文件夹中,每个命令都使用一个单独的文件。有助于让事情井井有条。
我看到有人说client.channels.get(`channelID`).send(`Text`)
但这给了我
Object is possibly 'undefined'.
和 Property 'send' does not exist on type 'Channel'.
实际上,每当有人运行重启命令时,我都会尝试在每个文本频道(从列表中给出)发送一条机器人消息,因为无论出于何种原因,人们都会不断重启机器人。如果有人需要使用它,我会时不时地把它作为一个有趣的事情来实现。机器人离线 3 分钟,但我不喜欢人们向它发送垃圾邮件,而且几乎无法使用机器人。
我正在使用 client.channels.get(channels.channelnames[5]).send("This is a message.")
根据https://discord.js.org/#/docs/main/stable/class/Collection看来好像没有get方法。
尝试client.channels[channels.channelnames[5]].send("This is a message.")
换句话说,尝试用方括号替换.get。
编辑:对不起,我有点快,我认为问题是类型转换,如果你知道它是一个文本频道,请尝试将 Channel
转换为 TextChannel
。
假设您的频道是文本频道,这应该有效。
client.on('ready',(e)=>{
let channel_ids = ['123','456','789'];
// loop through the list of channel ids.
for(let i=0, l=channel_ids.length; i<l; i++){
let channel_id = channel_ids[i];
let this_channel = client.channels.get( channel_id );
// if exists, and type in list send message
if(this_channel && ['dm', 'group', 'text'].indexOf( this_channel.type ) != -1){
this_channel.send('a cool message')
.then(message => console.log(`Sent message: ${message.content}`))
.catch(console.error);
}
}
});
解决方案:
if(msgObject.member.guild.channels.find(channel => channel.name === channels.channelnames[5]) as Discord.TextChannel) {
var txtchannel = msgObject.member.guild.channels.find(channel => channel.name === channels.channelnames[5]) as Discord.TextChannel
txtchannel.send("This is a message in a channel. Don't know why you read this.")
}
所以我基本上是在正确的轨道上。只需要做 as Discord.TextChannel
我认为这就是为什么 Cynthia 说要将变量转换为 TextChannel
此代码有效。感谢大家的帮助!