因此,我正在尝试创建一种更通用的机器人,并且可以将其添加到多个服务器上。我已经设法使用.find("name", "announcements")
重新格式化诸如宣布或加入消息之类的命令。
我的问题是,对于角色来说,这是行不通的。
我尝试了在互联网上找不到的东西,例如member.guild.roles.find("name", "Member")
或member.guild.roles.find(role => role.name === "Member")
,但这些都不起作用。各种不同的方法都会返回不同的错误,但是通常会说一些类似的东西,而不是整数(我认为)或雪花。
这是我目前正在使用的功能:
client.on('guildMemberAdd', (member) => {
var joinResponse = ("Hello **" + member.displayName + "**, welcome to **" + member.guild.name + "**!")
let role = member.guild.roles.find("name", "Member");
member.addRole(role).catch(console.error);
member.guild.channels.find('name', 'general').send(joinResponse);
总之,我要寻找的是能够按名称获得角色并向其中添加用户的功能。
(我几乎可以肯定,因为像Dyno这样的流行机器人能够使用命令向用户添加角色。)
答案 0 :(得分:0)
client.on('guildMemberAdd', (member) => {
const joinResponse = `Hello **${member.user.username}**, welcome to: **${member.guild.name}**!`
let role = member.guild.roles.get('Member');
if(!role) return console.log("Role doesen't exist.");
member.addRole(role);
const ch = member.guild.channels.get('general');
if(!ch) return console.log("Channel doesen't exist.");
ch.send(joinResponse);
});//You didn't have closing brackets (Could've been a problem)
首先,您的字符串 joinResponse 是一个函数,您完全搞砸了合并它,我建议使用Template literal。
我使用了get函数,因为它更易于使用和清洁,您只将ID或名称作为string传递。
要检查频道是否存在,我使用了if statements和exclamation mark,这表示不存在/为假。
如果我帮助您,请将其标记为答案,谢谢<3。如果您需要任何内容,请添加评论以回答问题或在Discord上给我发消息(您可以在我的stack overflow profile上找到我的鉴别器)。
有关进一步的说明,请单击蓝色词。