Fonksiyonlar bir bloğun Değişkenler alanında veya doğrudan yanıt metninde #{...} kullanılarak çağrılabilir:

#{discord_add_role(message_from, '1465674567090704592')}

Discord sunucu, kanal, rol ve mesaj kimlikleri uzun sayısal değerlerdir. Bunları kopyalamanın en kolay yolu Ayarlar → Gelişmiş → Geliştirici Modu'nu etkinleştirmektir. Bundan sonra herhangi bir nesnenin bağlam menüsünde Kimliği Kopyala seçeneği görünecektir.

Bot bağlantısı Discord'da Sohbet Robotu Oluşturma makalesinde açıklanmıştır.

Mesaj Kimliği Nereden Alınır

Bloğu tetikleyen mesajın kimliği discord_message_id değişkeninde saklanır. Ayrıca almanıza gerek yoktur:

#{discord_delete_message(discord_message_id)}

Önceden tanımlanmış değişkenlerde bulunmayan verilere ihtiyacınız varsa, tam webhook discord_webhook değişkeninde mevcuttur. save_webhook değişkenine herhangi bir değer atandığında doldurulur:

data = discord_webhook["data"]

msg_id = data["id"]

result = discord_reply_to_message(msg_id, "Bu, mesaja bir yanıttır")

Otomatik Oluşturulan Değişkenler

Bu değişkenler her olay için otomatik olarak doldurulur ve ek bir yapılandırma gerektirmez.

Değişken Açıklama Örnek
guild_id Sunucu kimliği 1465674567090704591
discord_event Tek kelimelik olay türü message
discord_message_id mid ön ekiyle mesaj kimliği mid1465674569095319625
message_from uid ön ekiyle olay yazarının kimliği uid413984787162726410
from_username Yazarın Discord kullanıcı adı 00rei
from_name Yazarın sohbetteki görünen adı Rus
username Bota doğrudan mesajlar için kullanıcı adı 00rei
is_bot Olay yazarı başka bir bot ise 1 0
nickname Sunucu takma adı; ayarlanmamışsa boş Moderatör
roles Yazarın rol kimliklerinin listesi ["1465674567090704592"]
is_admin Kullanıcı yönetici veya sunucu sahibi ise 1 1
reply_from Yanıtlanan mesajın yazarının kimliği uid493121376652230668
reply_from_username Yanıtlanan yazarın kullanıcı adı _deikin
reply_from_name Yanıtlanan yazarın görünen adı Rus
reply_to_bot Yanıt bota ise 1 0
reply_message_id Yanıtlanan mesajın kimliği mid1534837349219958804
reply_text Yanıtlanan mesajın metni bugün nöbetçi kim?

uid, cid ve mid ön ekleri değerin bir parçasıdır. Bu değişkenleri olduğu gibi fonksiyonlara iletin; ön ekleri kaldırmanıza gerek yoktur.

from_name ve from_username

from_name, kullanıcıya sohbette hitap etmek için kullanılması gereken adı içerir:

  1. Ayarlanmışsa sunucu takma adı.
  2. Hesap görünen adı.
  3. Kullanıcı adı.

Selamlamalarda kullanılması önerilen değişkendir çünkü from_username _deikin veya 00rei gibi görünebilir.

reply_* değişkenleri yalnızca gelen mesaj başka bir mesaja yanıt olduğunda doldurulur. Normal mesajlar için tümü temizlenir.

Bu nedenle, aşağıdaki koşul bir yanıtı normal bir mesajdan güvenilir bir şekilde ayırt eder:

#{reply_from != ''}

nickname, roles ve is_admin değişkenleri geçerli olayın yazarını ifade eder.

Discord bu verileri tepki olayları için sağlamaz, bu nedenle yönetici kontrolleri bir mesaj veya eğik çizgi komutu olayında yapılmalıdır.

Gelen mesaj metni, diğer kanallarda olduğu gibi standart question değişkeninde saklanır.


Olaylar

Normal mesajlara ek olarak, huniye hizmet olayları da gönderilir.

Bunların metni question değişkeninde saklanır, böylece normal metin koşullarını kullanarak bunları işleyebilirsiniz.

discord_event question içindeki metin Ne Zaman Oluşur
message Mesaj metni Bir üye mesaj gönderir
message_edit Güncellenmiş mesaj metni Bir mesaj düzenlenir
interaction /warn @kullanıcı spam Bir eğik çizgi komutu kullanılır veya bir düğmeye tıklanır
reaction_add new_like ❤️ uid413984787162726410 Bir tepki eklenir
reaction_remove reaction_remove ❤️ uid413984787162726410 Bir tepki kaldırılır
message_delete message_delete mid1465674569095319625 Bir mesaj silinir
messages_delete_bulk messages_delete_bulk 12 Birden çok mesaj silinir
member_join member_join uid413984787162726410 Bir üye sunucuya katılır
member_leave member_leave uid413984787162726410 Bir üye sunucudan ayrılır
member_update member_update uid413984787162726410 Bir üyenin takma adı veya rolleri değişir
member_ban member_ban uid413984787162726410 Bir üye yasaklanır
member_unban member_unban uid413984787162726410 Bir üyenin yasağı kaldırılır

Özel bir tepki için, emoji yerine özel emoji kimliği kullanılır:

new_like beer:1479419477396291696 uid413984787162726410

Ayrıntılar için Tepkiler bölümüne bakın.

Bir blok yalnızca üyeler tarafından gönderilen normal mesajlar için tetiklenmeliyse, aşağıdaki koşulu ekleyin:

discord_event == 'message'

Bu, tüm hizmet olaylarını aynı anda filtreler.

Yalnızca olay metnini kontrol etmek güvenilir değildir çünkü bir üye member_join gibi bir mesajı manuel olarak gönderebilir.

Önemli: member_update, botun kendisi tarafından atanan bir rol de dahil olmak üzere herhangi bir üye güncellemesi tarafından tetiklenir. member_update'e tepki veren ve bir rol atayan bir blok bir döngü oluşturabilir, bu nedenle bu tür koşullar her zaman uygun şekilde kısıtlanmalıdır.


Mesajlar

Fonksiyon Açıklama
discord_send_message(channel_id, text) Herhangi bir kanala mesaj gönder
discord_send_dm(user_id, text) Bir üyeye doğrudan mesaj gönder
discord_reply_to_message(message_id, text) Bir mesaja yanıt ver
discord_edit_message(message_id, text) Bot tarafından gönderilen bir mesajı düzenle
discord_delete_message(message_id) Bir mesajı sil
discord_bulk_delete_messages(channel_id, message_ids) Aynı anda birden çok mesajı sil
discord_get_message(channel_id, message_id) Bir mesajı al
discord_pin_message(message_id) Bir mesajı sabitle
discord_unpin_message(message_id) Bir mesajın sabitlemesini kaldır

Discord sınırlamaları: Kendi mesajlarınızı düzenleme veya silme için zaman sınırı yoktur. Toplu silme yalnızca 14 günden daha eski olmayan mesajlar için çalışır ve aynı anda 2 ila 100 mesaj silebilirsiniz.


Tepkiler

Fonksiyon Açıklama
discord_send_reaction(message_id, reaction) Bir tepki ekle
discord_delete_reaction(message_id, reaction, user_id) Bir tepkiyi kaldır. user_id atlanırsa, botun tepkisi kaldırılır

reaction parametresi, ❤️ gibi normal bir emojiyi veya özel bir sunucu emojisinin kimliğini kabul eder.

Özel Tepki Kimliği Nereden Alınır

Gerekli özel tepkiyi kanaldaki herhangi bir mesaja ekleyin.

Sohbette aşağıdaki gibi bir geri arama görünecektir:

new_like beer:1479419477396291696 uid413984787162726410

Burada:

beer:1479419477396291696

tepki kimliğidir.

Bunu kopyalayabilir ve tepki fonksiyonlarında kullanabilirsiniz:

#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}

Normal emojiler geri aramalarda olduğu gibi görünür:

new_like ❤️ uid413984787162726410

burada uid413984787162726410, tepkiyi ekleyen üyenin kimliğidir.


Moderasyon

Fonksiyon Açıklama
discord_timeout_member(user_id, seconds) Bir üyeyi belirtilen saniye sayısı kadar, en fazla 28 gün süreyle zaman aşımına uğrat
discord_remove_timeout(user_id) Zaman aşımını erken kaldır
discord_kick_member(user_id) Bir üyeyi sunucudan at; davetiye kullanarak geri dönebilir
discord_ban_member(user_id, delete_message_seconds) Bir üyeyi yasakla; ikinci argüman, en fazla 7 gün olmak üzere kaç saniyelik mesaj geçmişinin silineceğini belirtir
discord_unban_member(user_id) Bir üyenin yasağını kaldır

Discord, botun rolünden daha yüksek bir role sahip bir üyeyi botun yönetmesine izin vermez. Sunucu sahibi de yönetilemez.


Roller ve Üyeler

Fonksiyon Açıklama
discord_add_role(user_id, role_id) Bir rol ata
discord_remove_role(user_id, role_id) Bir rolü kaldır
discord_get_roles() Sunucunun rollerini ve kimliklerini al
discord_get_member(user_id) Takma ad, roller ve katılma tarihi dahil olmak üzere üye verilerini al
discord_set_nickname(user_id, nickname) Bir üyenin sunucu takma adını değiştir

Botun rolü, atadığı rolden daha yüksek olmalıdır.

@everyone rolü ve entegrasyonlar tarafından yönetilen roller (diğer botlara ait roller dahil) atanamaz.


Kanallar ve Biletler

Fonksiyon Açıklama
discord_create_channel(name, type, parent_id, permission_overwrites) Bir kanal oluştur
discord_delete_channel(channel_id) Bir kanalı sil
discord_set_channel_permission(channel_id, target_id, allow, deny, type) Kanal izinlerine izin ver veya reddet
discord_create_invite(channel_id, max_age, max_uses) Bir davetiye bağlantısı oluştur
discord_get_invites() Sunucunun davetiye bağlantılarını al

discord_create_channel için varsayılan type şudur:

Değer Kanal Türü
0 Metin kanalı
2 Ses kanalı
4 Kategori

Kanalı bu kategorinin içinde oluşturmak için parent_id'ye bir kategori kimliği iletebilirsiniz.

discord_set_channel_permission için son argüman, izinleri kimin alacağını belirtir:

Değer Hedef
1 Üye
0 Rol

allow ve deny parametreleri aşağıdaki değerleri kabul eder:

Değer İzin
1024 Kanalı görüntüle
2048 Mesaj gönder
3072 Kanalı görüntüle ve mesaj gönder
65536 Mesaj geçmişini oku

discord_create_invite için davetiye ömrü saniye cinsinden belirtilir.

Örneğin:

86400

24 saat anlamına gelir.

0 değerindeki max_uses sınırsız kullanım anlamına gelir.


Eğik Çizgi Komutları

Fonksiyon Açıklama
discord_get_commands() Sunucuda kayıtlı komutları al
discord_set_commands(commands) Komutların tamamını değiştir

discord_set_commands bir komut listesi kabul eder:

#{discord_set_commands('[
  {
    "name": "rules",
    "description": "Sunucu kurallarını göster"
  },
  {
    "name": "warn",
    "description": "Uyarı ver",
    "options": [
      {
        "type": 6,
        "name": "user",
        "description": "Kullanıcı",
        "required": true
      },
      {
        "type": 3,
        "name": "reason",
        "description": "Sebep",
        "required": false
      }
    ]
  }
]')}

Discord Gereksinimleri

  • name yalnızca küçük harfler içermeli, boşluk içermemeli ve 1 ila 32 karakter uzunluğunda olmalıdır.
  • description gereklidir ve 1 ila 100 karakter uzunluğunda olmalıdır.
  • Gerekli seçenekler, isteğe bağlı seçeneklerden önce gelmelidir.
  • Boş bir liste iletmek, tüm bot komutlarını sunucudan kaldırır.

Seçenek Türleri

Tür Açıklama
3 Dize
4 Tam sayı
5 Boole
6 Üye
7 Kanal
8 Rol

Bir komut çağrıldığında, aşağıdaki gibi bir dize olarak huniye gönderilir:

/warn @kullanıcı spam

Başka bir deyişle, komut adı ve seçenek değerleri boşluklarla ayrılır.

Bunu normal bir metin koşulu kullanarak işleyebilirsiniz.

Düğmeler için ayrı bir işleve gerek yoktur. Düğmeler normal bir yanıt bloğunda yapılandırılır ve bir düğmeye tıklama, eğik çizgi komutuyla aynı şekilde alınır: düğme değeri metinde görünür.


Puanlar ve Liderlik Tablosu

Discord entegrasyonu, yerleşik bir takdir sistemi içerir. Alıntı yapılan mesajın yazarına puan verilir.

Bunu seviyeler, rütbeler ve liderlik tabloları oluşturmak için kullanabilirsiniz.

Fonksiyon Açıklama
discord_add_thanks_score(value) Alıntı yapılan mesajın yazarına puan ekler
discord_add_thanks_score_for_answer(value) Yanıt veren üyeye puan ekler
discord_minus_thanks_score(value) Puanları kaldırır
discord_get_score(user_id) Bir üyenin puanlarını sayı olarak döndürür. Argüman olmadan, olay yazarını kullanır
discord_get_level(user_id, points_per_level) Bir üyenin seviyesini alır. Varsayılan eşik: seviye başına 100 puan
discord_get_user_info(user_id) Puanları, liderlik tablosu konumunu ve adı tek bir nesne olarak alır
discord_get_top(count, shift, humanize, delimiter) Liderlik tablosunu alır

discord_get_top için:

  • count — döndürülecek satır sayısı;
  • shift — atlanacak satır sayısı, sayfalama için kullanışlıdır;
  • humanize=true — görüntülenmeye hazır metin döndürür;
  • delimiter — üye adı ile puanlar arasındaki ayırıcı.

Bir blok koşulunda puanları karşılaştırırken discord_get_score kullanın. Bu fonksiyon bir sayı döndürür, bu nedenle sayısal karşılaştırmalar beklendiği gibi çalışır.


Örnekler

Doğrudan Mesaj ile Yeni Bir Üyeyi Karşılama

Blok koşulu:

member_join

Değişkenler alanında:

discord_send_dm(
    message_from,
    'Merhaba, #{from_name}! Sabitlenmiş kurallara göz atın.'
)

Yasaklı Kelime İçeren Bir Mesajı Silme ve Üyeye 24 Saat Süreli Zaman Aşımı Uygulama

Blok koşulu: yasaklı kelimelerin listesi.

Ek koşul:

is_admin != 1

Fonksiyonlar:

discord_delete_message(discord_message_id)

discord_timeout_member(message_from, 86400)

Belirli Bir Mesaja Tepki İçin Rol Atama

Blok koşulu:

new_like 🍕

Ek koşul:

contains(discord_message_id, '1534927170965602324')

Fonksiyon:

discord_add_role(
    message_from,
    '1465674567090704592'
)

Bir Düğmeden Özel Bilet Kanalı Oluşturma

ticket = discord_create_channel(
    'ticket-' + from_username
)

ticket_channel = get(
    get(ticket, 'data'),
    'id'
)

discord_set_channel_permission(
    ticket_channel,
    guild_id,
    None,
    1024,
    0
)

discord_set_channel_permission(
    ticket_channel,
    message_from,
    3072,
    None,
    1
)

discord_send_message(
    ticket_channel,
    'Sorununuzu tek bir mesajda açıklayın.'
)

İlk izin satırı, kanalı herkesten gizler (guild_id burada @everyone rolünü temsil eder).

İkinci satır, kanalı bileti oluşturan üye için kullanılabilir hale getirir.


Teşekkür İçin Puan Verme ve Seviyeye Göre Rol Atama

Blok koşulu:

thanks;thx;thank you

Ek koşul:

reply_from != '' and reply_from != message_from and reply_to_bot != 1

Fonksiyonlar:

discord_add_thanks_score(1)

if (discord_get_level(reply_from) >= 1) {
    discord_add_role(
        reply_from,
        '1465674567090704592'
    )
}

Koşul:

reply_from != message_from

üyelerin kendilerine puan vermesini engeller.

Koşul:

reply_to_bot != 1

bot'a puan verilmesini engeller.


Bir Komut ile Puanlarınızı Gösterme

Blok koşulu:

/xp

Değişkenler alanında:

points = discord_get_score()

lvl = discord_get_level()

Yanıt metni:

#{from_name}, #{points} XP'niz var · Seviye #{lvl}

Bir Komut ile Liderlik Tablosunu Gösterme

Blok koşulu:

/top

Yanıt metni:

🏆 XP Liderlik Tablosu:

#{discord_get_top(10, 0, true, ' — ')}