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.
Dokü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.
Discord Developer Portal — API Docs for Bots and Developers
Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.discord.com
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.
Gönder bakayım. Ben de yaptım bir şeyler birleştirir yolları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?
client.on('message', message => {Gönder bakayım. Ben de yaptım bir şeyler birleştirir yollarım.
Görünüşe göre botların, kullanıcı durumlarını görüntülemelerine yasak gelmiş.
Kaynak: Let bots and OAuth2 apps read user bios and banners · Issue #3095 · discord/discord-api-docs
Başka bir şekilde rol atamanız gerekecek.
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);
}
}
});
@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.
Eki Görüntüle 1805432
Eğer birçok sunucuda kullanılacak ise bu bot tagrole değişkeninin bir isim ile ayarlanması daha uygun olur.
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.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ı 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)
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.