使用 discord.js 在第一个频道发送消息
Sending a message the first channel with discord.js
我见过很多机器人在加入时会收到问候消息。通常发送到服务器的第一个通道。
例如:
机器人加入公会
机器人:嘿!谢谢邀请!
我现在的代码非常简单:
client.on("guildCreate", guild => {
the code goes here
});
虽然我不知道如何将消息发送到随机(第一个)频道。
如果有人能告诉我其他机器人是如何做到的,我将非常感激。
坦率地说,没有 "good way" 可以做到这一点...曾经有,直到 discord 删除它。 (曾经是:guild.defaultChannel
)
现在,机器人开发人员会做一些测试来找出他们将消息发送到哪里...
有多种方法可以找到好的频道(这里有一些):
答:找到一个名为 welcome
或 general
的频道,无论您希望机器人将其发送到哪个频道。
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`);
上面的代码是这样做的:
- 抓取所有频道并让它们排序
- 如果不是文字频道
return -1
- 如果禁止机器人发送
return -1
- 然后根据位置对频道进行排序
C:尝试其他方式:
查找服务器中大多数成员可以发送到的频道
找到角色@everyone 可以发送到 guild.roles.first()
的频道
查找获得最多 activity 的频道(检查过去 5-10 分钟内发送消息最多的频道)
编辑:截至 2020 年 9 月 27 日,使用 Discord.js 版本 12.3.1,我只需要添加对 cache
的引用即可获得正确的频道并确保迭代是正确进行。
我使用的是 Discord.js 版本 11.4.2,我能够使用以下代码将默认消息发送到 #general 频道。将下面的 bot
替换为您 client
的名字。
const Discord = require('discord.js');
const bot = new Discord.Client();
bot.on("guildCreate", guild => {
let channelID;
let channels = guild.channels.cache;
channelLoop:
for (let key in channels) {
let c = channels[key];
if (c[1].type === "text") {
channelID = c[0];
break channelLoop;
}
}
let channel = guild.channels.cache.get(guild.systemChannelID || channelID);
channel.send(`Thanks for inviting me into this server!`);
});
编辑:我发现 guild.systemChannelID
可以是 null
所以我更新了代码以搜索第一个文本频道并将其用于初始消息。
我知道已经晚了,但这是我为 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")
})
我苦苦挣扎的是找到公会。还有其他代码对我不起作用。
所以你需要找到这样的公会
const guild = client.guilds.cache.first();
然后你想得到这样的第一个频道(可能只有 'text channel',如果不删除 filter() )
const channel = guild.channels.cache.filter(c => c.type === 'text').find(x => x.position === 0);
然后就看你想做什么了...比如我想给频道发消息,所以我就这么做了
channel.send('Hello world');
我见过很多机器人在加入时会收到问候消息。通常发送到服务器的第一个通道。
例如:
机器人加入公会
机器人:嘿!谢谢邀请!
我现在的代码非常简单:
client.on("guildCreate", guild => {
the code goes here
});
虽然我不知道如何将消息发送到随机(第一个)频道。 如果有人能告诉我其他机器人是如何做到的,我将非常感激。
坦率地说,没有 "good way" 可以做到这一点...曾经有,直到 discord 删除它。 (曾经是:guild.defaultChannel
)
现在,机器人开发人员会做一些测试来找出他们将消息发送到哪里...
有多种方法可以找到好的频道(这里有一些):
答:找到一个名为 welcome
或 general
的频道,无论您希望机器人将其发送到哪个频道。
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`);
上面的代码是这样做的:
- 抓取所有频道并让它们排序
- 如果不是文字频道
return -1
- 如果禁止机器人发送
return -1
- 然后根据位置对频道进行排序
C:尝试其他方式:
查找服务器中大多数成员可以发送到的频道
找到角色@everyone 可以发送到 guild.roles.first()
的频道
查找获得最多 activity 的频道(检查过去 5-10 分钟内发送消息最多的频道)
编辑:截至 2020 年 9 月 27 日,使用 Discord.js 版本 12.3.1,我只需要添加对 cache
的引用即可获得正确的频道并确保迭代是正确进行。
我使用的是 Discord.js 版本 11.4.2,我能够使用以下代码将默认消息发送到 #general 频道。将下面的 bot
替换为您 client
的名字。
const Discord = require('discord.js');
const bot = new Discord.Client();
bot.on("guildCreate", guild => {
let channelID;
let channels = guild.channels.cache;
channelLoop:
for (let key in channels) {
let c = channels[key];
if (c[1].type === "text") {
channelID = c[0];
break channelLoop;
}
}
let channel = guild.channels.cache.get(guild.systemChannelID || channelID);
channel.send(`Thanks for inviting me into this server!`);
});
编辑:我发现 guild.systemChannelID
可以是 null
所以我更新了代码以搜索第一个文本频道并将其用于初始消息。
我知道已经晚了,但这是我为 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")
})
我苦苦挣扎的是找到公会。还有其他代码对我不起作用。
所以你需要找到这样的公会
const guild = client.guilds.cache.first();
然后你想得到这样的第一个频道(可能只有 'text channel',如果不删除 filter() )
const channel = guild.channels.cache.filter(c => c.type === 'text').find(x => x.position === 0);
然后就看你想做什么了...比如我想给频道发消息,所以我就这么做了
channel.send('Hello world');