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.
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)
});
}
});
@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.
@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.
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.