我正在尝试制作一个 discord.js 机器人,当用户输入 +rolename 时为其添加角色。
这是我想出来的:
const { Client } = require("discord.js");
const { config } = require("dotenv");
const fs = require('fs');
const client = new Client({
partials: ['MESSAGE', 'CHANNEL', 'REACTION']
});
config({
path: __dirname + "/.env"
});
client.on("ready", () => {
console.log(`Hi, ${client.user.username} is now online!`);
client.user.setStatus('online');
client.user.setActivity('me getting developed', { type: "WATCHING"})
.then(() => console.log('bot status set'))
.catch(console.error);
});
client.on("message", (message) => {
if (message.content.startsWith("+")) {
var args = message.content.split(' ');
if (args.length == 1) {
console.log(`message is created -> ${message}`);
const { guild } = message;
var passrole = args[0];
var roleid = passrole.substring(1);
var role = message.guild.roles.cache.find((role) => {
return role.name == roleid;
});
console.log('role found')
var authoruser = message.author.id;
if (!role) {
message.reply('this role does not exist')
console.log('role does not exist')
return;
}
console.log(target)
authoruser.roles.add(role)
console.log("role added")
} else {
message.reply('invalid argument length passed')
return;
}
} else {
return;
}
});
client.login(process.env.TOKEN);
运行代码时出现以下错误:
<块引用>类型错误:无法读取未定义的属性“添加”
当我使用此代码并键入 +test @DiscordName#0001 时不会发生这种情况:
const { Client } = require("discord.js");
const { config } = require("dotenv");
const fs = require('fs');
const client = new Client({
partials: ['MESSAGE', 'CHANNEL', 'REACTION']
});
config({
path: __dirname + "/.env"
})
client.on("ready", () => {
console.log(`Hi, ${client.user.username} is now online!`);
client.user.setStatus('online');
client.user.setActivity('me getting developed', { type: "WATCHING"})
.then(presence => console.log('bot status set'))
.catch(console.error);
});
client.on("message", (message) => {
let target = message.mentions.members.first();
if (message.content.startsWith("+")) {
var args = message.content.split(' ');
if(args.length == 2){
console.log(`message is created -> ${message}`);
const { guild } = message;
var passrole = args[0]
var roleid = passrole.substring(1);
var role = message.guild.roles.cache.find((role) => {
return role.name == roleid;
})
console.log('role found')
if (!role) {
message.reply('role does not exist')
console.log('role does not exist')
return;
}
console.log(target)
target.roles.add(role)
console.log("role added")
} else {
message.reply('invalid argument length passed')
return;
}
} else {
return;
}
});
client.login(process.env.TOKEN);
我的问题是:如何将角色添加到消息作者。
提前致谢
答案 0 :(得分:1)
问题是您的 authoruser
是用户 ID(= 字符串)而不是成员。您不能向用户添加角色。此外,如果您获得角色的 id 而不是角色的名称,您可以使用角色的 id 添加角色。
client.on("message", message =>{
if (message.content.startsWith("+")) {
var args = message.content.split(' ');
if (args.length !== 1) {
message.reply('invalid argument count passed');
return;
}
if (!message.member ||!message.guild) {
message.reply('can only be used in guilds');
return;
}
console.log(`message is created -> ${message}`);
const { guild } = message;
var passrole = args[0];
var roleid = passrole.substring(1);
// If you get the role's id then you won't need this
var role = message.guild.roles.cache.find((role) => role.name == roleid);
if (!role) {
message.reply('this role does not exist');
console.log('role does not exist');
return;
}
console.log('role found');
console.log(target);
message.member.roles.add(role);
// If you get the role's id use this:
message.member.roles.add(roleid);
console.log('role added');
});