发送消息与discord.js所述第一信道(Sending a message the first

2019-09-25 18:59发布

我已经看到了很多,当他们加入有一个问候消息的僵尸。 其通常被发送到服务器的第一个信道。

例如:

机器人加入公会

机器人:嘿! 谢谢你邀请我!

代码中,我现在所拥有的是非常简单的:

client.on("guildCreate", guild => {
    the code goes here
});

我不知道如何将消息发送到一个随机的(第一)通道,虽然。 如果任何人都可以请告诉我其他的机器人怎么做,我会很感激。

Answer 1:

我使用Discord.js版本11.4.2,我能使用下面的代码发送默认消息到#通用通道。 更换bot下面不管你的client的名字叫。

const Discord = require('discord.js');
const bot = new Discord.Client();

bot.on("guildCreate", guild => {
    let channelID;
    let channels = guild.channels;
    channelLoop:
    for (let c of channels) {
        let channelType = c[1].type;
        if (channelType === "text") {
            channelID = c[0];
            break channelLoop;
        }
    }

    let channel = bot.channels.get(guild.systemChannelID || channelID);
    channel.send(`Thanks for inviting me into this server!`);
});

编辑:我发现guild.systemChannelID可以为null ,所以我已经更新的代码搜索的第一个文本通道和使用,对于初始消息。



Answer 2:

坦率地说,没有“好办法”待办事项这......曾经有不和谐之前删除它。 (曾经是: guild.defaultChannel
现在天BOT开发者做一些测试,以找出他们发送消息...

有多种方法待办事项找到一个很好的渠道(这里的几个):

答:找到一个名为渠道welcomegeneral无论你喜欢机器人将其发送到。

guild.channels.find(`name`,`welcome`).send(`Thx for invite`);

B:发送到机器人被允许发送至第一通道。 (这个效果很好,除非机器人被赋予管理员);

guild.channels.sort(function(chan1,chan2){
    if(chan1.type!==`text`) return 1;
    if(!chan1.permissionsFor(guild.me).has(`SEND_MESSAGES`)) return -1;
    return chan1.position < chan2.position ? -1 : 1;
}).first().send(`Thx! for invite`);

上面的代码做到这一点:

  1. 抓住所有的渠道和排序他们让
  2. 如果它不是一个文本通道return -1
  3. 如果机器人是DIS-允许发送return -1
  4. 然后根据自己的位置渠道排序

C:尝试其他的方法:

查找通道在服务器大多数成员可以发送到
找到一个通道的作用@everyone可以向guild.roles.first()
查找得到最多的活动的通道 (检查与过去5-10分钟发送的最多消息频道)



文章来源: Sending a message the first channel with discord.js