Çözüldü Discord kullanıcının duruma göre rol nasıl verilir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

kaan32k

Decapat
Katılım
5 Şubat 2021
Mesajlar
101
Daha fazla  
Cinsiyet
Erkek
Discord'da durumuna X yazana Y rolü vermek istiyorum bunun kodu var mıdır? Node.js için çalışacak?
 
Son düzenleyen: Moderatör:
Çözüm

Discord.py'de şöyle bir şey var. https://discordpy.readthedocs.io/en/stable/api.html#discord.Member.activity

CustomActivity olarak dönüyor diye biliyorum ancak discord.js'de nasıldır var mıdır gram bilmiyorum.
Yeni botların buna yetkisi yok diye biliyorum. Tabii en son 2-3 yıl önce bot dokümanını açtım. Biraz araştırayım.

Hocam benim elimde bir komut varda orada taga göre veriyor onun duruma göre vermesini istiyorum onu atsam ona göre editleyebilir misiniz?
 
Son düzenleme:
client.on('message', message => {
let tag = "TAG"; // TAGINIZ
let rol = "627387152837115904"; //tag alındığı zaman verilecek rolün ID-si
let channel = message.guild.channels.find('name', 'tagrol-log'); //tagrol-log yerine kendi kanalınızın ismini yaza bilirsiniz
if (!rol) return;
if (!tag) return;
if (message.member.user.username.includes(tag)) {
if (message.member.roles.has(rol)) return;
message.member.addRole(rol).then(() => {
const tagalma = new Discord.RichEmbed()
.setColor("RANDOM")
.setDescription(`${message.author} ${tag} tagını aldığından dolayı <@&TAG ALANLARIN VERİLECEK ROL ID> rolü Verildi`)
.setTimestamp()
channel.send(tagalma)
});
}
if (!message.member.user.username.includes(tag)) {
if (!message.member.roles.has(rol)) return;
message.member.removeRole(rol).then(() => {
const tagsilme = new Discord.RichEmbed()
.setColor("RANDOM")
.setDescription(`${message.author} ${tag} tagını sildiğinden dolayı <@&TAG ALANLARIN ALINACAK ROL ID> rolü Alındı`)
.setTimestamp()
channel.send(tagsilme)
});
}
});

Hocam bunu duruma göre editleyebilir misiniz?
 
Kullanıcı Bio'suna erişmeye yetkisi yok botların. Gizlilik ihlali sebebiyle. Attığınız kodda da işlemler username üzerinden dönüyor. (XXX#1111)
 
@kaan32k Örnek olarak verdiğiniz kodda kullanıcının kullanıcı adına göre işlem yapıyor. Evet, bu şekilde ilerleyebiliriz. Ancak dediğim gibi kullanıcının "hakkımda" yazısına erişimimiz yok.

Gönderdiğiniz kod geliştirilebilir. Her mesajı dinlememiz gerekmiyor, bunun için "kullanıcı adı güncellendi" event'i var.

Aşağıdaki gibi geliştirebilirim.
JavaScript:
client.on('guildMemberUpdate', (oldMember, newMember) => {
   const guild = newMember.guild;
   const tag = "TAG"; // Sunucunun tagı
   const tagRole = "627387152837115904"; // Verilecek rolün ID si
   const channel = guild.channels.cache.find(ch => ch.name === 'tagrol-log'); // Değişimlerin paylaşılacağı günlük kanalı adı

   // Kullanıcı adı değişmişse işleme devam edeceğiz
   if (newMember.nickname && oldMember.nickname !== newMember.nickname) {
      // Eğer kullanıcı adında belirlediğimiz TAG var ise ve rol atanmamış ise işleme devam edeceğiz
      if (newMember.nickname.includes(tag) && !newMember.roles.cache.has(tagRole)) {
         const role = guild.roles.cache.get(tagRole); // Rolü çektik
         newMember.roles.add(role); // Rolü verdik
         // Log tuttuğumuz kanala mesajı ayarlıyoruz
         const tagAdded = new Discord.MessageEmbed()
            .setColor("RANDOM")
            .setDescription(`${newMember.user.tag}, ${tag} tagını belirttiği için ${role.name} rolü verildi.`)
            .setTimestamp();
         channel.send(tagAdded); // Log mesajını gönderdik
      }
      // Yeni kullanıcı adında tag yok ama rolü var ise
      else if (!newMember.nickname.includes(tag) && newMember.roles.cache.has(tagRole))
         const role = guild.roles.cache.get(tagRole);
         newMember.roles.remove(role); // Rolü elinden akdık
         const tagRemoved = new Discord.MessageEmbed()
            .setColor("RANDOM")
            .setDescription(`${newMember.user.tag}, ${tag} tagını sildiği için ${role.name} rolü alındı.`)
            .setTimestamp();
         channel.send(tagRemoved);
      }
   }
});

Bu arada lütfen kod paylaşırken kod bloğu olarak paylaşın. Böylece okuması daha kolay oluyor.


Eğer birçok sunucuda kullanılacak ise bu bot TagRole değişkeninin bir isim ile ayarlanması daha uygun olur.
 

Hocam bunu şimdi kullanıcı adına göremi düzenledin yoksa duruma göremi
Bir de ben hakkımdadan bahsetmiyorum zaten durumdan bahsediyorum o yasak değil sanırım.
 
Hocam bunu şimdi kullanıcı adına göremi düzenledin yoksa duruma göremi
Bir de ben hakkımdadan bahsetmiyorum zaten durumdan bahsediyorum o yasak değil sanırım.
Kullanıcı adına göre çalışıyordu, ben sadece her mesajı değil kullanıcı hareketlerini izleyecek şekilde düzenledim. Bu sayede birisi rolü aldıktan sonra kullanıcı adını değiştirse bile rolün alınmaması durumu ortadan kalkmış oldu.

Dökümanlarda kullanıcının özel durumu ile ilgili bir şey bulamadım. Sanırım bunun için de erişim izni yok. Bazı yerlerde presence verisinden geliyor diye okudum ancak presence verisinde de bulamadım.

 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…