Discord.js - Rollen vergeben und nehmen?
Hi, wie schreibe ich, wenn ich Rollen vergeben und nehmen will? Als Beispiel
/role add [@user] [@role]
/role remove [@user] [@role]
Sodass diese 2 Befehle jeweils Rollen vergben oder nehmen...
1 Antwort
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
So:
command(client,"bb", (message) => {
const member = message.mentions.members.first()
const role = message.mentions.roles.first();
member.roles.add(role);
})
mit const member bekommen wir den member objekt von den user in den discord.
mit const role bekommen wir nur die rollen id der role.
member.roles.add(role) hinzufügt die role
wenn du noch fragen hast kannst du hier unten fragen.
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
const { prefix } = require("./../config.json");
module.exports = (client, aliases, callback) => {
if (typeof aliases === "string") {
aliases = [aliases];
};
client.on("message", message => {
const { content } = message;
if (content[0] !== prefix || message.author.bot) return;
aliases.forEach(element => {
const command = `${prefix}${element}`;
if (content.startsWith(`${command} `) || content === command) {
callback(message);
};
});
} );
};
Das ist mein Command handler, mein 2 parameter ist der trigger dammit mein funktion eben getriggert wird, also wenn man in den discord chat ".bb" schreibt dann wird dieses command ausgeführt.
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
Außerdem:
client.on('message', message => {
if (message.content === `${prefix}role-add`) {
const member = message.mentions.members.first()
const role = message.mentions.roles.first();
member.roles.add(role);
}
})
TypeError: Cannot read property 'roles' of undefined
at Client.<anonymous> (/opt/BOTs/System-BOTs/CrafterGame/craftergame-sy.js:71:10)
at Client.emit (node:events:390:22)
at MessageCreateAction.handle (/opt/BOTs/System-BOTs/CrafterGame/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (/opt/BOTs/System-BOTs/CrafterGame/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/opt/BOTs/System-BOTs/CrafterGame/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
at WebSocketShard.onPacket (/opt/BOTs/System-BOTs/CrafterGame/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
at WebSocketShard.onMessage (/opt/BOTs/System-BOTs/CrafterGame/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
at WebSocket.onMessage (/opt/BOTs/System-BOTs/CrafterGame/node_modules/ws/lib/event-target.js:132:16)
at WebSocket.emit (node:events:378:20) at Receiver.receiverOnMessage (/opt/BOTs/System-BOTs/CrafterGame/node_modules/ws/lib/websocket.js:825:20)
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
hast du die role auch markiert mit @
z.b wenn es die role "member" gibt musst du diese markieren?
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
Nicht wirklich ein Plan von ein Youtube Bot oder das andere da ich selber nicht so tief in dieses thema bin
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
Also die member markierung funktioniert richtig oder? Das einzige was ich mir vorstellen kann das falsch ist das der bot zu wenig rechte hat die rolle zuzuweisen oder das die rolle einfach nicht richtig markiert wurde, du musst drauf achten das der bot ein hoheren rang als die role hat die er zuteilen soll
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
Das liegt am Code! Du musst vergessen haben, irgendwie roles zu definieren...
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
Roles ist definiert wenn du richtig markiert hast, schau nach ob du es wie ich es gemacht hast:
!role-add @meinName @rolenName
Dann müsste alles passen, console.log mal message.mentions da siehst du auch ob roles definiert ist, so sieht es bei mir aus wenn ich console.log:
MessageMentions {
everyone: false,
users: Collection(1) [Map] {
'420247637397078016' => User {
id: '420247637397078016',
system: null,
locale: null,
flags: [UserFlags],
username: 'GencAL',
bot: false,
discriminator: '4556',
avatar: '6b5c8c52d71495529e1e327b0e1cb444',
lastMessageID: null,
lastMessageChannelID: null
}
},
roles: Collection(1) [Map] {
'809394622526521354' => Role {
guild: [Guild],
id: '809394622526521354',
name: 'Eggs',
color: 15844367,
hoist: false,
rawPosition: 2,
permissions: [Permissions],
managed: false,
mentionable: false,
deleted: false
}
},
_members: Collection(1) [Map] {
'420247637397078016' => GuildMember {
guild: [Guild],
joinedTimestamp: 1613776084809,
lastMessageID: null,
lastMessageChannelID: null,
premiumSinceTimestamp: null,
deleted: false,
nickname: null,
_roles: [Array],
user: [User]
}
},
_channels: null,
crosspostedChannels: Collection(0) [Map] {}
}
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
Wo ist roles definiert?
client.on('message', message => {
if (message.content === `${prefix}role-add`) {
const member = message.mentions.members.first()
const role = message.mentions.roles.first();
member.roles.add(role);
}
})
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
add den command und schau dann in der console nach
console.log(roles.mentions);
MessageMentions {
everyone: false,
users: Collection(1) [Map] {
'420247637397078016' => User {
id: '420247637397078016',
system: null,
locale: null,
flags: [UserFlags],
username: 'GencAL',
bot: false,
discriminator: '4556',
avatar: '6b5c8c52d71495529e1e327b0e1cb444',
lastMessageID: null,
lastMessageChannelID: null
}
},
roles: Collection(1) [Map] {
'809394622526521354' => Role {
guild: [Guild],
id: '809394622526521354',
name: 'Eggs',
color: 15844367,
hoist: false,
rawPosition: 2,
permissions: [Permissions],
managed: false,
mentionable: false,
deleted: false
}
},
Schau nach ob roles definiert ist, wenn nicht dann hast du keine role markiert...
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
Ich habe jetzt
client.on('message', message => {
if (message.content === `${prefix}role-add`) {
const member = message.mentions.members.first()
const role = message.mentions.roles.first();
message.member.roles.add(role);
console.log(roles.mentions);
}
})
Zwar keine Fehler mehr, jedoch reagiert der BOT nicht!
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
Hast du auch in der console geschaut warum das so ist?
Beschäftige dich mehr damit weil sonst wirst du sehr schwer weiterkommen wenn es zu problemen in code kommt.
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
Der Problem liegt nicht am code dann, da es bei mir funktioniert, der Problem liegt an den einstellungen da entweder der bot nicht genug rechte hat, seine rolle ganz unten in der hierachie der rollen ist und somit höhere rollen den membern nicht geben kann.
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
Also, keine Rückmeldung = Funktionsfähig?
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
Also, wieder folgenden Code:
client.on('message', message => {
if (message.content === `${prefix}role-add`) {
const member = message.mentions.members.first()
const role = message.mentions.roles.first();
member.role.add(role);
console.log(roles.mentions);
}
})
Keine Fehlermeldung, keine Reaktion! Und ja, der Bot ist über einem User, der über keine Rollen verfügt!
![](https://images.gutefrage.net/media/user/albaniankingg/1572833677810_nmmslarge__0_0_345_345_c3cffad0be2ff4a2004a6e5f82675a33.jpg?v=1572833678000)
Nach dem ich den komplett gleichen code benutzt habe, habe ich bemerkt das dein if statment in ein false resultiert....
message.content === `${prefix}role-add` ist false weil
wir danach jemand markieren
also der content ist nicht nur: !role-add
sondern: !role-add @user @role
Du musst message.content.startsWitch(`${prefix}role-add`)
in deiner if statment hinzufügen um zu schauen ob alles passt.
Du hast auch bei member.role.add(role) das s bei member.roles vergessen.
Wir greifen ja auf den member object, dieser hat ein roles object und mit der add methode hinzufügen wir die role die wir in unser variable gespeichert haben.
Hier der code:
client.on('message', message => {
if (message.content.startsWith(`.role-add`)) {
const member = message.mentions.members.first()
const role = message.mentions.roles.first();
member.roles.add(role);
}
})
![](https://images.gutefrage.net/media/user/Justman/1616880026973_nmmslarge__0_0_150_150_e606c9223e32171f71d6c9626a0f04ee.jpg?v=1616880027000)
Wofür das bb?