discord.js 发送消息到特定频道
我一直在寻找,似乎无法找到使用 Typescript 制作的 discord 机器人所遇到的这个问题的答案。我将所有命令放在自己的文件夹中,每个命令使用一个单独的文件。有助于保持井然有序。
我见过有人说
client.channels.get(`channelID`).send(`Text`)
但这给了我
对象可能“未定义”。
和
属性“send”在类型“Channel”上不存在。
我实际上试图在有人运行重启命令时为每个文本频道(从列表中给出)发送一条机器人消息,因为无论出于什么原因,人们都会不断重启机器人。如果有人需要使用它,我会将它实现为一件有趣的事情,作为一个巨魔时不时地做。该机器人离线 3 分钟,但我不喜欢有人向它发送垃圾邮件,并且几乎使机器人无法使用。
我正在使用
client.channels.get(channels.channelnames[5]).send("This is a message.")
解决方案:
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
的原因。
此代码有效。谢谢大家的帮助!
根据 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);
}
}
});