与enmap结合使用时的自定义角色

时间:2019-09-24 15:27:26

标签: discord.js

我尝试添加代码以允许人们自定义人们加入服务器时所扮演的角色,该角色可以在每个服务器上进行设置,但是我似乎无法使其正常工作。问候语通道,问候语和DM均正常工作。它只是添加角色。如果您能指出正确的方向,那将非常有帮助。

client.settings = new Enmap({
  name: "settings",
  fetchAll: false,
  autoFetch: true,
  cloneLevel: 'deep'
});
// Just setting up a default configuration object here, to have somethign to insert.
const defaultSettings = {
  prefix: "!",
  modLogChannel: "mod-log",
  modRole: "Moderator",
  adminRole: "Administrator",
  welcomeChannel: "chat",
  welcomeMessage: "Welcome to the server, {{user}} ?",
  welcomeDMMessage: "**Welcome to the shadow realm, Jimbo.** *? Listen here. ?* Allow me to introduce myself. I am Gamer Bot ?. I am both your ? best friend ? and ? worst nightmare ?. Don't be a ? dickhead or I'll be a pain in your ? ass ?. ***FOLLOW ? THE ? RULES.*** Also, I talk a lot ?. You will hear a lot from me in the server. So.... yeah. ?",
  rolesOnJoin: "Basic"
}

client.on("guildDelete", guild => {
  // When the bot leaves or is kicked, delete settings to prevent stale entries.
  client.settings.delete(guild.id);
});


client.on("guildMemberAdd", member => {
client.settings.ensure(member.guild.id, defaultSettings);
let roleAdd = client.settings.get(member.guild.id, "rolesOnJoin");
let welcomeMessage = client.settings.get(member.guild.id, "welcomeMessage");
let welcomeDMMessage = client.settings.get(member.guild.id, "welcomeDMMessage");
let role = member.guild.roles.find(role => role.name == roleAdd);
  welcomeMessage = welcomeMessage.replace("{{user}}", member.user.tag)
  member.guild.channels
    .find("name", client.settings.get(member.guild.id, "welcomeChannel"))
    .send(welcomeMessage, {files: ["https://cdn.glitch.com/ecc1aef4-3247-42a1-9361-cfc56e9c5ba1%2F75AC6C9B-3E71-4F25-B8CF-47050B4B8F21.jpeg"]})
    .catch(console.error);
  member.send(welcomeDMMessage);
  member.addRole(role);
});

2 个答案:

答案 0 :(得分:0)

大概是问题所在,addRole()需要一个Role对象或一个角色ID:

https://discord.js.org/#/docs/main/stable/class/GuildMember?scrollTo=addRole https://discord.js.org/#/docs/main/stable/typedef/RoleResolvable

"Basic"都不是。

如果只有角色名称,则需要在guild.roles集合中以该名称找到它。

答案 1 :(得分:0)

addRole()需要角色ID(或作为对象的角色),您仍然可以通过其名称使用

找到它
let role = guild.roles.find(role => role.name == roleAdd)
member.addRole(role);