使用discord.js在第一个频道发送消息

时间:2018-07-20 17:51:55

标签: javascript discord discord.js

我看到很多机器人在加入时都会发出问候信息。通常将其发送到服务器的第一个通道。

例如:

机器人加入了公会

Bot:嘿!谢谢你邀请我!

我现在拥有的代码非常简单:

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

我不知道如何将消息发送到随机(第一个)通道。 如果有人可以告诉我其他机器人是如何做到的,那真是太好了。

4 个答案:

答案 0 :(得分:2)

坦率地说,没有“好方法”来执行此操作...直到不和谐删除它为止。 (以前是:guild.defaultChannel
如今,机器人开发人员已经进行了一些测试,以找出将消息发送到的位置...

有多种方法可以找到一个好的频道(以下几种):

A:查找一个名为welcomegeneral的频道,无论您希望机器人将其发送到哪个频道。

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

B:发送到允许机器人发送到的第一个频道。 (除非向bot授予管理员权限,否则效果很好)

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. 如果禁止漫游器发送return -1
  4. 然后根据其位置对渠道进行排序

C:尝试其他方法:

查找服务器中大多数成员可以发送到的频道
找到@所有人可以发送给guild.roles.first()的频道
查找活动最活跃的频道
(检查过去5-10分钟内发送的邮件最多的频道)

答案 1 :(得分:2)

我知道已经很晚了,但这是我在12.x版本中使用和使用的方式

client.on('guildCreate', guild => {
    const channel = guild.channels.cache.find(channel => channel.type === 'text' && channel.permissionsFor(guild.me).has('SEND_MESSAGES'))
    channel.send("Thanks for invite me")
})

答案 2 :(得分:0)

我正在使用Discord.js版本11.4.2,并且能够使用以下代码向#general频道发送默认消息。用您的if /?的名字替换下面的rd /?

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!`); }); ,所以我更新了代码以搜索第一个文本通道并将其用于初始消息。

答案 3 :(得分:0)

我一直在努力寻找公会。还有其他代码对我不起作用。

所以你需要找到这样的公会

const guild = client.guilds.cache.first();

然后你想得到这样的第一个频道(可能只有'文本频道',如果不是只是删除过滤器())

const channel = guild.channels.cache.filter(c => c.type === 'text').find(x => x.position === 0);

然后就看你想做什么了......例如,我想向频道发送消息,所以我就这样做了

channel.send('Hello world');