Discord bot durum otorol sistemi nasıl yapılır?

Discord botlarının şu anda "Hakkımda" bölümüne erişimi yok. Github üzerinden istenmiş bu özellik ama olumlu dönüş yok anladığım kadarıyla.
Durum dediği custom presence bölümü. Ben de hakkımda anlamıştım başta.
 
Discord.js Activity kullanarak erişebiliriz o zaman. Daha sonra Activity ismine, detayına, durumuna göre rolü verebiliriz.
JavaScript:
import { Client, GatewayIntentBits } from "discord.js";
import { config } from "dotenv";

config();
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
    GatewayIntentBits.GuildPresences,
  ],
});

client.login(process.env.TOKEN);

client.on("ready", () => {
  console.log(`Logged in as ${client.user.tag}`);
});

client.on("messageCreate", (msg) => {
  // !rolver komutu ile aktivite ismi Visual Studio Code
  // olan kullanıcılara "Mod" isimli rolü verdik.
  if (msg.content === "!rolver") {
    const members = msg.guild.members.cache;
    members.forEach((member) => {
      if (member.presence.activities.length !== 0) {
        member.presence.activities.forEach((activity) => {
          if (activity.name === "Visual Studio Code") {
            const role = msg.guild.roles.cache.find(
              (role) => role.name === "Mod"
            );
            member.roles.add(role);
          }
        });
      }
    });
  }
});

Örnek Activity objesi.
JSON:
[
  {
    name: 'Visual Studio Code',
    type: 0,
    url: null,
    details: 'Editing index.js',
    state: '26 lines of code, 634 bytes',
    applicationId: '383226320970055681',
    timestamps: { start: 2023-06-04T21:05:48.211Z, end: null },
    party: null,
    assets: RichPresenceAssets {
      largeText: 'Editing a JAVASCRIPT file',
      smallText: 'Visual Studio Code',
      largeImage: '808841241142755358',
      smallImage: '565945770067623946'
    },
    flags: ActivityFlagsBitField { bitfield: 0 },
    emoji: null,
    buttons: [],
    createdTimestamp: 1685912835216
  }
]
 
Son düzenleme:
Discord.js Activity kullanarak erişebiliriz o zaman. Daha sonra Activity ismine, detayına, durumuna göre rolü verebiliriz.
JavaScript:
import { Client, GatewayIntentBits } from "discord.js";
import { config } from "dotenv";

config();
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
    GatewayIntentBits.GuildPresences,
  ],
});

client.login(process.env.TOKEN);

client.on("ready", () => {
  console.log(`Logged in as ${client.user.tag}`);
});

client.on("messageCreate", (msg) => {
  // !rolver komutu ile aktivite ismi Visual Studio Code
  // olan kullanıcılara "Mod" isimli rolü verdik.
  if (msg.content === "!rolver") {
    const members = msg.guild.members.cache;
    members.forEach((member) => {
      if (member.presence.activities.length !== 0) {
        member.presence.activities.forEach((activity) => {
          if (activity.name === "Visual Studio Code") {
            const role = msg.guild.roles.cache.find(
              (role) => role.name === "Mod"
            );
            member.roles.add(role);
          }
        });
      }
    });
  }
});

Örnek Activity objesi.
JSON:
[
  {
    name: 'Visual Studio Code',
    type: 0,
    url: null,
    details: 'Editing index.js',
    state: '26 lines of code, 634 bytes',
    applicationId: '383226320970055681',
    timestamps: { start: 2023-06-04T21:05:48.211Z, end: null },
    party: null,
    assets: RichPresenceAssets {
      largeText: 'Editing a JAVASCRIPT file',
      smallText: 'Visual Studio Code',
      largeImage: '808841241142755358',
      smallImage: '565945770067623946'
    },
    flags: ActivityFlagsBitField { bitfield: 0 },
    emoji: null,
    buttons: [],
    createdTimestamp: 1685912835216
  }
]
Discord.py'nin gözünü seveyim.
 
Discord.js Activity kullanarak erişebiliriz o zaman. Daha sonra Activity ismine, detayına, durumuna göre rolü verebiliriz.
JavaScript:
import { Client, GatewayIntentBits } from "discord.js";
import { config } from "dotenv";

config();
const client = new Client({
 intents: [
 GatewayIntentBits.Guilds,
 GatewayIntentBits.GuildMessages,
 GatewayIntentBits.MessageContent,
 GatewayIntentBits.GuildPresences,
 ],
});

client.login(process.env.TOKEN);

client.on("ready", () => {
 console.log(`Logged in as ${client.user.tag}`);
});

client.on("messageCreate", (msg) => {
 // !rolver komutu ile aktivite ismi Visual Studio Code.
 // olan kullanıcılara "Mod" isimli rolü verdik.
 if (msg.content === "!rolver") {
 const members = msg.guild.members.cache;
 members.forEach((member) => {
 if (member.presence.activities.length !== 0) {
 member.presence.activities.forEach((activity) => {
 if (activity.name === "Visual Studio Code") {
 const role = msg.guild.roles.cache.find(
 (role) => role.name === "Mod"
 );
 member.roles.add(role);
 }
 });
 }
 });
 }
});

Örnek Activity objesi.
JSON:
[
 {
 name: 'Visual Studio Code',
 type: 0,
 url: null,
 details: 'Editing index.js',
 state: '26 lines of code, 634 bytes',
 applicationId: '383226320970055681',
 timestamps: { start: 2023-06-04T21:05:48.211Z, end: null },
 party: null,
 assets: RichPresenceAssets {
 largeText: 'Editing a JAVASCRIPT file',
 smallText: 'Visual Studio Code',
 largeImage: '808841241142755358',
 smallImage: '565945770067623946'.
 },
 flags: ActivityFlagsBitField { bitfield: 0 },
 emoji: null,
 buttons: [],
 createdTimestamp: 1685912835216.
 }
]

Hocam ben bunu nereye yapıştıracağım direk index.js'yemi yoksa command olarakmı pek bilgim yok da o konuda.
 
Bro ben discord.js biliyorum derdini anlat ondan sonra sonra yardımcı olayım.

Durumunda belirli bir şey yazan kullanıcılara bot otomatik rol versin log olarak da bir kanala kaydetsin istiyorum bu kullanıcının durumunda bu yazdığı için bu rol verildi diye durum diyorum yani hakkındasına bakmak yasakmis durum yasak değil galiba bunun kodu lazım ve bu kodu nereye atacağım index.js mi atim yoksa başka bir yeremi anlamadım nereye yazacağımı kodu.
 

Geri
Yukarı