Discord.js - Rollen vergeben und nehmen?

1 Antwort

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.

Woher ich das weiß:Hobby – Ich interessiere mich in IT Sachen.

Justman 
Beitragsersteller
 21.02.2021, 16:33

Wofür das bb?

0
albaniankingg  21.02.2021, 16:37
@Justman
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.

0
Justman 
Beitragsersteller
 21.02.2021, 17:43
@albaniankingg

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)
0
albaniankingg  21.02.2021, 20:08
@Justman

hast du die role auch markiert mit @

z.b wenn es die role "member" gibt musst du diese markieren?

0
albaniankingg  21.02.2021, 20:10
@Justman

Nicht wirklich ein Plan von ein Youtube Bot oder das andere da ich selber nicht so tief in dieses thema bin

0
albaniankingg  22.02.2021, 09:03
@Justman

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

0
Justman 
Beitragsersteller
 22.02.2021, 09:16
@albaniankingg

Das liegt am Code! Du musst vergessen haben, irgendwie roles zu definieren...

0
albaniankingg  22.02.2021, 09:38
@Justman

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] {}
}
0
Justman 
Beitragsersteller
 22.02.2021, 09:43
@albaniankingg

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);
    }
})
0
albaniankingg  22.02.2021, 09:46
@Justman

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...

0
Justman 
Beitragsersteller
 22.02.2021, 09:47
@albaniankingg

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!

0
albaniankingg  22.02.2021, 09:49
@Justman

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.

0
albaniankingg  22.02.2021, 13:47
@Justman

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.

0
Justman 
Beitragsersteller
 23.02.2021, 09:53
@albaniankingg

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!

0
albaniankingg  23.02.2021, 16:27
@Justman

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);
    }
})
0