Webailesi Portal Sistemi
pro public serverim için hs sesi arıyorum acaba yardımcı olurmusunuz
Sunucumuzda oynayacak arkadaş veya ekipleri bekliyoruz. Sunucu kiralanmış mod kurulum aşamasındadır gelecek ekiplere Admin Vip gerekirse panel de verilir istenilen tek şey aktif oyuncular
Merhaba
Silah menusunda premıum silahlar + VIP kostum (model) kulanıyoruz fakat L harfine sahip kişiler ( server yöneticileri ) kullanabiliyor.
Biz normal adminlerde de admin modeli olsun istiyoruz panelden admin modeli yüklüyoruz ama çakışıyor ayrıca ekstra eklenti olarak yükleyip onuda farklı bir harfe atayıp yoneti kıyafetleriyle çakışmamasını istiyoruz admin modellerini ek olarak ekledim yardımcı olabilecek varmıdır.
Silah menusunda premıum silahlar + VIP kostum (model) kulanıyoruz fakat L harfine sahip kişiler ( server yöneticileri ) kullanabiliyor.
Biz normal adminlerde de admin modeli olsun istiyoruz panelden admin modeli yüklüyoruz ama çakışıyor ayrıca ekstra eklenti olarak yükleyip onuda farklı bir harfe atayıp yoneti kıyafetleriyle çakışmamasını istiyoruz admin modellerini ek olarak ekledim yardımcı olabilecek varmıdır.
Merhaba arkadaşlar,
WxDigitals, markalar ve işletmeler için uçtan uca dijital çözümler sunmak amacıyla yayına açıldı.
Web tasarım, özel yazılım, e-ticaret, SEO, performans optimizasyonu, reklam yönetimi ve sosyal medya gibi birçok alanda profesyonel hizmet sunuyoruz.
Neler Yapıyoruz?
Ayrıca web sitemizde kullanıcılar için hazırlanmış ücretsiz dijital araçlar da yer alıyor.
Web Sitemiz:
https://wxdigitals.com/
Instagram:
@wxdigitals
Değerli yorumlarınızı, görüşlerinizi ve önerilerinizi bekliyoruz.
Destek olan herkese şimdiden teşekkür ederiz. 🙏
WxDigitals
360 derece dijital ajans çözümleri.
WxDigitals, markalar ve işletmeler için uçtan uca dijital çözümler sunmak amacıyla yayına açıldı.
Web tasarım, özel yazılım, e-ticaret, SEO, performans optimizasyonu, reklam yönetimi ve sosyal medya gibi birçok alanda profesyonel hizmet sunuyoruz.
Neler Yapıyoruz?
- Kurumsal Web Tasarım
- Özel Yazılım Geliştirme
- E-Ticaret Çözümleri
- WordPress ve CMS Hizmetleri
- SEO ve Yerel SEO Çalışmaları
- GEO - Yapay Zekâ Arama Motoru Optimizasyonu
- Site Hız ve Performans Optimizasyonu
- Google Ads ve Meta Reklam Yönetimi
- Sosyal Medya Yönetimi
- UI/UX, Grafik ve Marka Tasarımı
Ayrıca web sitemizde kullanıcılar için hazırlanmış ücretsiz dijital araçlar da yer alıyor.
Web Sitemiz:
https://wxdigitals.com/
Instagram:
@wxdigitals
Değerli yorumlarınızı, görüşlerinizi ve önerilerinizi bekliyoruz.
Destek olan herkese şimdiden teşekkür ederiz. 🙏
WxDigitals
360 derece dijital ajans çözümleri.
JailBreak'i gerçekten keyif alarak oynamak isteyen herkese selam!
Biz Holocoust olarak sadece bir sunucu değil, zaman geçirmekten keyif alacağınız bir topluluk oluşturmaya çalışıyoruz. Sürekli geliştirdiğimiz sistemler, aktif yönetim ekibimiz ve oyuncularımızın önerilerini dikkate alan yapımızla her geçen gün daha da büyüyoruz.
Amacımız; gereksiz karmaşadan uzak, eğlenceli ve adil bir JailBreak ortamı sunmak. İster yıllardır CS 1.6 oynuyor ol, ister yeni başlamış ol; aramıza katıldığında kendine uygun bir ortam bulabilirsin.
Holocoust SERVER IP 95.173.173.114 TS3: HOLOCOUST
Biz Holocoust olarak sadece bir sunucu değil, zaman geçirmekten keyif alacağınız bir topluluk oluşturmaya çalışıyoruz. Sürekli geliştirdiğimiz sistemler, aktif yönetim ekibimiz ve oyuncularımızın önerilerini dikkate alan yapımızla her geçen gün daha da büyüyoruz.
Amacımız; gereksiz karmaşadan uzak, eğlenceli ve adil bir JailBreak ortamı sunmak. İster yıllardır CS 1.6 oynuyor ol, ister yeni başlamış ol; aramıza katıldığında kendine uygun bir ortam bulabilirsin.
Holocoust SERVER IP 95.173.173.114 TS3: HOLOCOUST
Merhaba
serverımızda Chatmanager (yetkili tag) kullanıyoruz fakat .amxx .sma ulaşamıyorum oyt de bi zaman sonra silinmişti sadece .ini dosyası var yardımcı olabilecek varmıdır teşekkürler
.ini ye göre ayarlayıp yardımcı olabilecek varsa çok memnun olurum
serverımızda Chatmanager (yetkili tag) kullanıyoruz fakat .amxx .sma ulaşamıyorum oyt de bi zaman sonra silinmişti sadece .ini dosyası var yardımcı olabilecek varmıdır teşekkürler
.ini ye göre ayarlayıp yardımcı olabilecek varsa çok memnun olurum
🚀 Intents (Amaçlar) Nedir? Neden Botum Çalışmıyor?
Dostlar selam! Birçok arkadaşımız Discord botu kodlamaya başladığında o meşhur ve can sıkıcı hüsranı yaşıyor: "Botum aktif oluyor ama yazdığım hiçbir mesaja cevap vermiyor, üstelik hata da vermiyor!"
Eğer bu durumu yaşıyorsanız, tebrikler: Intents (Amaçlar) konusuyla tanışma vaktiniz geldi.
Eskiden (v12 zamanları) bir bot sunucuya girdiğinde her şeyi otomatik görebilir, her mesajı okuyabilirdi. Fakat Discord güvenlik ve performans sebebiyle buna dur dedi: "Artık botun ne yapacaksa, neleri okumak istiyorsa bana önceden haber vermek zorundasın!" İşte biz Discord'a verdiğimiz bu niyetlere, amaçlara **Intent** diyoruz.
🤔 Hangi Intent Ne İşe Yarar?
Botumuzu tanımlarken `new Client({ intents: [...] })` içine yazacağımız bazı temel amaçlar şunlardır:
GatewayIntentBits.Guilds: Botun sunuculardaki genel olayları (kanal açılması, sunucu bilgileri vb.) görmesini sağlar. (Neredeyse her bot için ZORUNLUDUR!)
GatewayIntentBits.GuildMessages: Sunucuda bir mesaj atıldığını veya silindiğini algılamasını sağlar.
GatewayIntentBits.MessageContent: Mesajların İÇERİĞİNİ (ne yazıldığını) okuyabilmesini sağlar. Eğer bu yetki yoksa bot, sohbete bir mesaj atıldığını bilir ama içinde ne yazdığını asla bilemez!
GatewayIntentBits.GuildMembers: Sunucuya giren ve çıkan üyeleri (hoş geldin mesajları vs.) görmesini sağlar.
⚠️ En Kritik Kısım: Privileged (Ayrıcalıklı) Intents
İşte dananın kuyruğunun koptuğu yer burası. Kodunuza `MessageContent` veya `GuildMembers` gibi hassas verileri ekleseniz bile botunuz direkt çalışmaz, terminalde "Disallowed Intents" (İzin Verilmeyen Amaçlar) hatası alırsınız. Çünkü Discord, kullanıcı gizliliği için bu kritik yetkileri sizin **Discord Developer Portal** üzerinden manuel olarak onaylamanızı şart koşar.
Developer Portal'dan Yetkiler Nasıl Açılır?
1. `discord.com/developers/applications` adresine gidin.2. Botunuzu seçin ve sol menüden **"Bot"** sekmesine tıklayın.
3. Biraz aşağı kaydırdığınızda **"Privileged Gateway Intents"** başlığını göreceksiniz.
4. Oradaki Presence Intent, Server Members Intent ve Message Content Intent seçeneklerini aktif (mavi) hale getirin ve alttan "Save Changes" diyerek kaydedin.
Artık botunuz kör değil, her şeyi görebilecek!
💻 Hadi Kodlara Bakalım!
Peki bunları kodumuza nasıl dökeceğiz? Aşağıda, tüm bu kritik intentleri barındıran örnek bir bot altyapısını görüyorsunuz.
Doğru Intents Kurulumu
Kod:
const { Client, GatewayIntentBits } = require('discord.js');
// Botun ihtiyaç duyduğu tüm Amaçları (Intents) bir dizi içinde belirtiyoruz:
const client = new Client({
intents: [
GatewayIntentBits.Guilds, // Sunucu olayları (Zorunlu gibi)
GatewayIntentBits.GuildMessages, // Mesaj olaylarını yakalama
GatewayIntentBits.MessageContent, // Mesajların İÇERİĞİNİ okuyabilme (PORTALDAN AÇMAK ŞART!)
GatewayIntentBits.GuildMembers // Üye giriş-çıkış olayları (PORTALDAN AÇMAK ŞART!)
]
});
client.on('messageCreate', (message) => {
// Botun kendi kendine cevap verip sonsuz döngüye girmesini engelliyoruz
if (message.author.bot) return;
// Eğer MessageContent intent'ini açmasaydık, bot bu "sa" yazısını asla göremezdi!
if (message.content.toLowerCase() === 'sa') {
message.reply('Aleyküm selam, hoş geldin!');
}
});🎁 Örnek Dosya (Github)
Yukarıdaki kodun tüm intentleriyle beraber tıkır tıkır çalışır hale getirdiğim örnek projeyi Github üzerinden inceleyebilir ve direkt kendi botunuzda deneyebilirsiniz.>> Tıklayıp Github Örneğine Git <<
Artık "Botum neden cevap vermiyor" krizini çözdüğümüze göre çok daha rahat kodlayabiliriz. Takıldığınız bir yer olursa aşağıdan sormaktan çekinmeyin, herkese iyi kodlamalar!
🚀 Slash (Eğik Çizgi) Komutları Neden Önemli?
Dostlar selam, hepimiz eskiden `!ping`, `!ban` gibi prefix (ön-ek) kullanarak komut yapmaya alışkındık. Ancak Discord artık bu sistemi yavaş yavaş bitiriyor ve yerini tamamen Slash (Eğik Çizgi) komutlarına bırakıyor.
Eğer botunuzun profesyonel görünmesini istiyorsanız ve Discord'un onaylı (verified) botu olmak gibi bir hedefiniz varsa, Slash komutlarını kesinlikle sisteminize entegre etmeniz gerekiyor!
🤔 Slash Komutlarının Mantığı Nedir?
Eski sistemde botunuz sunucudaki her atılan mesajı okur ve "Acaba bu benim komutum mu?" diye kontrol ederdi. Slash komutlarında ise durum farklı ve çok daha performanslı!
Öncelikle komutumuzun adını, açıklamasını ve kullanıcından isteyeceğimiz verileri (seçenekleri) Discord'a kayıt ettiriyoruz (Deploy). Kullanıcı sohbete `/` yazdığında, Discord bu komutu direkt kendi menüsünde şık bir şekilde gösteriyor.
💻 Hadi Kodlara Bakalım! (Detaylı Anlatım)
Aşağıdaki adımlarda sıfırdan detaylı bir `/selamla` komutunun nasıl oluşturulacağını göreceğiz. Bu komut, kullanıcıdan kimi selamlamak istediğini soracak (Option kullanımı) ve işlemi 3 ana adıma böleceğiz.
1. Adım: Komutu Seçenekli (Options) Olarak İnşa Etmek
SlashCommandBuilder sınıfını kullanarak komutumuzu oluşturuyoruz. Ayrıca `.addUserOption` ile kullanıcıdan birini etiketlemesini isteyeceğiz.Kod:
const { SlashCommandBuilder } = require('discord.js');
const selamlaKomutu = new SlashCommandBuilder()
.setName('selamla') // Komutun adı (KÜÇÜK HARF VE BOŞLUKSUZ)
.setDescription('Etiketlediğiniz kişiye selam verir.')
.addUserOption(option =>
option.setName('hedef')
.setDescription('Kimi selamlamak istersin?')
.setRequired(true) // Bu seçeneği girmek zorunlu mu? (true/false)
);2. Adım: Discord'a Kayıt Ettirmek (Global vs Sunucu Deploy)
En çok karıştırılan yer burasıdır! Oluşturduğunuz komutu REST modülü ile Discord'a yollarken iki seçeneğiniz var:A) Sunucuya Özel (Guild Deploy): Komutlar sadece belirttiğiniz ID'ye sahip sunucuda çalışır. Anında (milisaniyeler içinde) güncellenir. Geliştirme/test aşamasında kesinlikle bu kullanılmalıdır.
B) Global Deploy: Komutlar botun olduğu TÜM sunucularda çalışır. Fakat Discord'un önbellekleme (cache) sistemi yüzünden yeni komutların veya güncellemelerin tüm sunuculara yansıması 1 ila 8 saat arası sürebilir!
Biz test aşamasında olduğumuz için **Sunucuya Özel (Guild)** yöntemiyle kaydediyoruz:
Kod:
const { REST, Routes } = require('discord.js');
const rest = new REST({ version: '10' }).setToken('SENIN_BOT_TOKENIN');
(async () => {
try {
console.log('Slash komutu Discord API\'sine gönderiliyor...');
// Sunucuya Özel (Guild) Kayıt İşlemi: (Anında güncellenir)
await rest.put(
Routes.applicationGuildCommands('SENIN_BOT_ID', 'TEST_SUNUCUSUNUN_ID'),
{ body: [selamlaKomutu.toJSON()] }
);
// Eğer her sunucuda çalışmasını isterseniz (Global - Güncellenmesi saatler sürebilir):
// await rest.put(Routes.applicationCommands('SENIN_BOT_ID'), { body: [selamlaKomutu.toJSON()] });
console.log('Başarılı! Komut test sunucusuna anında eklendi.');
} catch (error) {
console.error('HATA: Komut kaydedilirken bir sorun oluştu!', error);
}
})();3. Adım: Komuta Cevap Vermek (interactionCreate)
Kullanıcı menüden `/selamla` komutunu seçip hedefini belirttiğinde cevap verebilmemiz için interactionCreate olayını dinliyoruz.Kod:
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'selamla') {
// Kullanıcının girdiği 'hedef' seçeneğini çekiyoruz
const hedefKullanici = interaction.options.getUser('hedef');
// .reply() metodu ile cevabımızı veriyoruz!
await interaction.reply(`Merhaba ${hedefKullanici}! Sana ${interaction.user} tarafından sıcak bir selam gönderildi! 👋`);
}
});🎁 Örnek Dosya (Github)
Buradaki 3 adımı birleştirip, kullanıcıdan veri alma ve anında güncellenen Sunucu (Guild) Deploy sistemini tek bir dosyada tıkır tıkır çalışır hale getirdiğim örnek projeyi Github üzerinden inceleyebilir ve direkt test edebilirsiniz.>> Tıklayıp Github Örneğine Git <<
Takıldığınız bir yer olursa aşağıdan sormaktan çekinmeyin, herkese iyi kodlamalar!
🚀 Collection Nedir Kısaca?
Dostlar selam, bot kodlarken sık sık `client.users.cache` veya `message.guild.members.cache` gibi terimler görmüşsünüzdür. İşte bu "cache" dediğimiz şeyler aslında arka planda birer Collection'dır.
Collection, kısaca verileri bir kutuda düzenli tutmamızı sağlayan Discord.js'e özel bir yapıdır.
🤔 İyi de Map'ten Farkı Ne?
Collection aslında JavaScript'in kendi özelliği olan Map sisteminin güçlendirilmiş halidir.
Map ile verileri çok hızlı bir şekilde "Anahtar-Değer" olarak saklarız. Ama Collection, Map'in bu hızını alır ve üstüne dizilerde (Array) kullanmaya bayıldığımız o meşhur find(), filter(), map() gibi harika filtreleme özelliklerini ekler. Yani ikisinin en iyi yönlerini birleştirerek işimizi çok kolaylaştırır!
💻 Hadi Kodlara Bakalım!
Diyelim ki elimizde sunucudaki üyeleri tutan "uyeler" adında bir Collection var. Aşağıdaki kodlarda en çok işinize yarayacak özellikleri en basit haliyle anlattım.
1. set() ve get() - Veri Ekleme & Çekme
Bir kişiyi sisteme eklemek için set(), o kişiyi sistemden geri çağırmak için get() kullanırız.Kod:
const { Collection } = require('discord.js');
const uyeler = new Collection();
// Kişileri ID'lerine göre kaydediyoruz (set ile ekliyoruz)
uyeler.set('11111', { isim: 'never meant to belong', rol: 'Kurucu', level: 99 });
uyeler.set('22222', { isim: 'toji', rol: 'Üye', level: 5 });
uyeler.set('33333', { isim: 'aki', rol: 'Moderatör', level: 15 });
uyeler.set('44444', { isim: 'maravilha', rol: 'VIP', level: 50 });
// Kaydettiğimiz 'never meant to belong' kullanıcısının bilgilerini çağıralım (get ile çekiyoruz)
const kurucu = uyeler.get('11111');
console.log(kurucu.isim); // Ekrana 'never meant to belong' yazar2. has() - "Bu kişi bizde var mı?" Kontrolü
Biri bir komut kullandığında, "Bu adamın verisi bende kayıtlı mı?" diye anında bakmak isterseniz has() tam aradığınız şeydir. Eğer veri varsa true döner ve işleme devam edersiniz, ama veri yoksa false döner ve hata mesajı verebilirsiniz.Kod:
if (uyeler.has('55555')) {
// Çözüm / Başarılı Durum
console.log("Bu üye zaten kayıtlı, işlem yapalım!");
} else {
// Hata / Başarısız Durum
console.log("HATA: Böyle biri sistemde bulunamadı!");
}3. find() - Aradığım Kişiyi Bul!
Koca listeden sadece belirli bir şarta uyan ilk kişiyi şıp diye bulmak isterseniz imdadınıza find() yetişir.Kod:
// Rolü 'Kurucu' olan İLK kişiyi bana getir
const patron = uyeler.find(uye => uye.rol === 'Kurucu');
console.log(patron.isim); // Çıktı: never meant to belong4. filter() - Toplu Eleme Yapmak (Çok Önemli!)
"Ben bir kişi değil, şartıma uyan herkesi istiyorum!" derseniz filter() kullanacaksınız.Kod:
// Sadece leveli 10'dan küçük olan üyeleri toplayalım
const yeniUyeler = uyeler.filter(uye => uye.level < 10);
console.log(`Leveli düşük tam ${yeniUyeler.size} kişi buldum!`);
// Bu filtrelemeye sadece 'toji' takılacaktır, çünkü leveli 5.5. map() - Sadece İsimleri Alıp Dizi Yapmak
Diyelim ki sadece üyelerin isimlerine ihtiyacınız var ve level gibi geri kalan bilgiler umurunuzda değil. İşte burada map() hayat kurtarır.Kod:
// Tüm üyelerin sadece isimlerini alıp virgülle yan yana yazalım
const sadeceIsimler = uyeler.map(uye => uye.isim);
console.log(sadeceIsimler.join(', ')); // Çıktı: never meant to belong, toji, aki, maravilha6. sort() - Kim Daha Güçlü? Sıralaması
Kişileri levellerine göre (ya da parasına, exp puanına göre) sıralamak için sort() kullanabilirsiniz. Rank (sıralama) komutlarında birebirdir.Kod:
// Üyeleri levellerine göre en yüksekten en düşüğe doğru sıralayalım
uyeler.sort((a, b) => b.level - a.level);🎁 Örnek Dosya (Github)
Buradaki her şeyin nasıl çalıştığını kendi gözlerinizle görmek isterseniz, sizin için hazırladığım şu Github kodunu inceleyebilir ve çalıştırabilirsiniz:>> Tıklayıp Github Örneğine Git <<
Umarım mantığını en basit haliyle anlatabilmişimdir dostlar. Takıldığınız, "bu nasıl çalışıyor" dediğiniz bir yer varsa sormaktan çekinmeyin!
Discord.js GuildMember ile User Arasındaki Fark
En çok karıştırılan Discord.js kavramlarından biri
En çok karıştırılan Discord.js kavramlarından biri
Merhaba arkadaşlar,
Discord.js geliştirirken en çok karıştırılan konulardan biri User ve GuildMember kavramlarıdır.
İlk bakışta ikisi de aynı kullanıcıyı temsil ediyor gibi görünse de aslında farklı amaçlar için kullanılırlar.
Bu rehberde User ve GuildMember arasındaki farkları basit örneklerle anlatacağım.
📖 User Nedir?
User, Discord hesabını temsil eder.
Yani kullanıcının Discord genelindeki bilgilerini içerir.
Örneğin;
- Kullanıcı ID'si
- Kullanıcı adı
- Avatar
- Global Display Name
- Bot olup olmadığı
Bu bilgiler kullanıcının tüm Discord hesabı için geçerlidir.
Kullanıcı hangi sunucuya girerse girsin User bilgisi değişmez.
📖 GuildMember Nedir?
GuildMember ise kullanıcının belirli bir sunucudaki durumunu temsil eder.
Yani aynı kullanıcı farklı sunucularda farklı GuildMember bilgilerine sahip olabilir.
GuildMember içerisinde;
- Roller
- Takma ad (Nickname)
- Katılma tarihi
- Timeout bilgisi
- Sunucuya özel izinler
gibi sadece o sunucuya ait bilgiler bulunur.
🧠 Basit Bir Örnek
toji isimli bir kullanıcı düşünelim.
Discord hesabında;
- Kullanıcı Adı : toji
- Avatar : Profil Fotoğrafı
bulunuyor.
Bu bilgiler User nesnesinde yer alır.
Ancak;
Sunucu A'da "Kurucu" rolüne,
Sunucu B'de ise "Üye" rolüne sahip olabilir.
Ayrıca;
Sunucu A'da takma adı "çok havalı nickname",
Sunucu B'de ise "never meant to belong"
olabilir.
İşte bu bilgiler GuildMember nesmesinde tutulur.
🆚 Hangi Bilgi Nerede Bulunur?
User içerisinde bulunan bilgiler:
- ID
- Username
- Global Display Name
- Avatar
- Bot bilgisi
GuildMember içerisinde bulunan bilgiler:
- Nickname
- Roller
- Sunucuya katılma tarihi
- Timeout bilgisi
- Sunucuya özel izinler
⚠️ En Çok Yapılan Hata
Yeni başlayanların yaptığı en büyük hata User üzerinden rol kontrolü yapmaya çalışmaktır.
Örneğin;
Kod:
user.rolesÇünkü roller Discord hesabına değil, sunucuya özeldir.
Rol kontrolü her zaman GuildMember üzerinden yapılmalıdır.
Aynı durum;
- Nickname
- Timeout
- Permissions
için de geçerlidir.
💡 User'a Nasıl Ulaşılır?
GuildMember nesnesi zaten User nesnesini içerisinde barındırır.
Bu yüzden;
Kod:
member.userYani;
GuildMember → Sunucu bilgileri
User → Discord hesabı bilgileri
şeklinde düşünebilirsiniz.
✔ Sonuç
User ve GuildMember aynı kullanıcıyı temsil etse de farklı amaçlar için kullanılır.
- User, kullanıcının Discord hesabına ait genel bilgileri içerir.
- GuildMember, kullanıcının belirli bir sunucudaki durumunu temsil eder.
- Rol, nickname ve izin gibi işlemler GuildMember üzerinden yapılmalıdır.
- Avatar, kullanıcı adı ve kullanıcı ID'si gibi bilgiler ise User üzerinden alınmalıdır.
Bu iki kavramın farkını doğru anlamak, Discord.js geliştirirken karşılaşabileceğiniz birçok hatanın önüne geçmenizi sağlayacaktır.
Hoşgeldin, Ziyaretçi
Forumda Ara
Forum İstatistikleri
Son Aktiviteler
Klan sistemi claim
Yorumlar:
9
•
Okunma:
172
Gölge Avcısı Jailbreak Mo...
Yorumlar:
6
•
Okunma:
278
Cs 1.6 - İstek & Öneri & ...
Yorumlar:
24
•
Okunma:
17.350
Human Multi Jump
Yorumlar:
92
•
Okunma:
55.246
Zombie Plague Hud Message
Yorumlar:
101
•
Okunma:
53.983
Zombie Plague Grab Menu
Yorumlar:
153
•
Okunma:
58.775