读取服务器成员的状态并添加/移除角色,discord.js v14

huangapple go评论110阅读模式
英文:

Read status of server members and give/remove roles , discord.js v14

问题

I need my bot read member servers status and if here write my server tag ( discord.gg/... ) give them role and if they take it out remove it. How can i do this?

  1. client.on('presenceUpdate', async (oldPresence, newPresence) => {
  2. const role = newPresence.guild.roles.cache.get('910192386267840513');
  3. const member = newPresence.member;
  4. const activities = member.user.presence.activities[0];
  5. if (activities && (activities.state.includes('.gg/') || activities.state.includes('discord.gg/'))) {
  6. return newPresence.member.roles.add(role);
  7. }
  8. else if (member.roles.cache.get(role.id)) {
  9. newPresence.member.roles.remove(role);
  10. }
  11. });

I found that code but giving errors.

EDIT 2

I changed my code and it didn't give errors but doesn't work.

  1. const { Client, GatewayIntentBits, Partials } = require("discord.js");
  2. const client = new Client({
  3. intents: [
  4. GatewayIntentBits.Guilds,
  5. GatewayIntentBits.GuildMessages,
  6. GatewayIntentBits.GuildPresences,
  7. GatewayIntentBits.GuildMembers,
  8. ],
  9. partials: [
  10. Partials.Channel,
  11. Partials.Message,
  12. Partials.User,
  13. Partials.GuildMember,
  14. Partials.Reaction,
  15. ],
  16. });
  17. module.exports = client;
  18. client.on("presenceUpdate", (oldPresence, newPresence) => {
  19. if (newPresence.activities.some(a => a.state && a.state.includes("gg"))) {
  20. console.log("1 role gave");
  21. newPresence.member.roles.add("1127983091386962060");
  22. } else {
  23. newPresence.member.roles.remove("1127983091386962060");
  24. }
  25. });
英文:

I need my bot read member servers status and if here write my server tag ( discord.gg/... ) give them role and if they take it out remove it. How can i do this?

  1. client.on('presenceUpdate', async (oldPresence, newPresence) => {
  2. const role = newPresence.guild.roles.cache.get('910192386267840513');
  3. const member = newPresence.member;
  4. const activities = member.user.presence.activities[0];
  5. if (activities && (activities.state.includes('.gg/') || activities.state.includes('discord.gg/'))) {
  6. return newPresence.member.roles.add(role);
  7. }
  8. else if (member.roles.cache.get(role.id)) {
  9. newPresence.member.roles.remove(role);
  10. }});

I found that code but giving errors.

EDIT 2

I changed my code and didn't give errors but doesn't working.

  1. const {Client, ActivityType,GatewayIntentBits,Partials,} = require("discord.js");
  2. const { Client } = require("discord.js");
  3. const client = new Client({
  4. intents: [
  5. GatewayIntentBits.Guilds,
  6. GatewayIntentBits.GuildMessages,
  7. GatewayIntentBits.GuildPresences,
  8. GatewayIntentBits.GuildMembers,
  9. ],
  10. partials: [
  11. Partials.Channel,
  12. Partials.Message,
  13. Partials.User,
  14. Partials.GuildMember,
  15. Partials.Reaction,
  16. ],
  17. });
  18. module.exports = client;
  19. client.on("presenceUpdate", (oldPresence, newPresence) => {
  20. if (newPresence.activities.some(a => a.state && a.state.includes("gg"))) {
  21. console.log(" 1 role gave");
  22. newPresence.member.roles.add("1127983091386962060");
  23. } else {
  24. newPresence.member.roles.remove("1127983091386962060");
  25. }
  26. });

答案1

得分: 0

你的代码中有很多重复和不必要的行!以下是其简化版本:

  1. client.on("presenceUpdate", (oldPresence, newPresence) => {
  2. if (newPresence.activities.some(a => a.state && a.state.includes("discord.gg"))) {
  3. newPresence.member.roles.add("role_id");
  4. } else {
  5. newPresence.member.roles.remove("role_id");
  6. }
  7. });

你可以根据自己的需求随时修改代码。

我建议为使代码正常工作,使用以下意图:

  • Guilds
  • GuildMembers
  • GuildPresences

还请确保在你的开发者门户上启用特权意图!

参考链接:PresenceGuildMemberRoleManagerClient#presenceUpdate

英文:

You're code has a lot of repetitions and unnecessary lines!
Here is a shortened version of it:

  1. client.on("presenceUpdate", (oldPresence, newPresence) => {
  2. if (newPresence.activities.some(a => a.state && a.state.includes("discord.gg")) {
  3. newPresence.member.roles.add("role_id");
  4. } else {
  5. newPresence.member.roles.remove("role_id");
  6. }
  7. });

You can always modify the code as per your use.

I recommend using the following intents for the code to work:

  • Guilds
  • GuildMembers
  • GuildPresences

Make sure to enable privileged intents on your developer portal too!

Reference: Presence, GuildMemberRoleManager, Client#presenceUpdate.

huangapple
  • 本文由 发表于 2023年7月11日 14:58:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/76659388.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定