我一直在寻找,似乎找不到这个问题的答案,我正在与一个不和谐的机器人,我正在与打字稿。我的所有命令都在它们自己的文件夹中,每个命令使用一个单独的文件。有助于使事情组织起来。
我见过有人说client.channels.get(`channelID`).send(`Text`)
但这给了我Object is possibly 'undefined'.和Property 'send' does not exist on type 'Channel'.
实际上,每当有人运行重新启动命令时,我都会尝试在每个文本通道(从列表中)创建一个bot消息,因为不管出于什么原因,人们总是重新启动机器人。如果有人需要使用它,我会时不时地把它作为一个巨魔来实现,这是一件有趣的事情。该机器人离线3分钟,但我不喜欢让人垃圾邮件,而且基本上有机器人无法使用。
我用的是client.channels.get(channels.channelnames[5]).send("This is a message.")


发布于 2019-12-11 19:57:23
解决方案:
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的原因
这个密码起作用了。谢谢你们的帮助!
发布于 2019-12-10 19:05:34
根据https://discord.js.org/#/docs/main/stable/class/Collection的说法,似乎没有get方法。
试试client.channels[channels.channelnames[5]].send("This is a message.")
换句话说,尝试用方括号替换.get。
编辑:对不起,我太快了,我想问题是类型转换,如果你知道Channel是一个文本通道,试着把它转换成一个TextChannel。
发布于 2019-12-10 19:43:18
假设你的频道是文本频道,这应该是可行的。
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);
}
}
});https://stackoverflow.com/questions/59273659
复制相似问题