C# ile Discord Botu Yapımı 2 Discord.NET Eklentisi Discord.InteractivityAddon

Discord botu yapımında Bu, Discord API Wrapper Discord.NET için bir eklentidir ve discord botunuza etkileşim eklemeyi kolaylaştırır.

Kurulum

Paket NuGet’te indirilebilir. Discord Botu Yapımında Discord.Net’in önizlemesini kullanmayı planlıyorsanız, bu paketin önizleme sürümünü kullandığınızdan emin olun.

Özellikleri

  • Filtrenizden geçen bir mesajı / tepkiyi bekliyorum
    • Filtrelenmiş mesajlar / reaksiyonlar üzerinde eylemler çalıştırın
  • Gecikmeli mesaj ve dosya gönderme ve silme
  • Tamamen özelleştirilebilir güçlü bir Paginator
    • Çok sayfalı mesajlar gönderin
    • Tepkileri kullanarak sayfalar arasında ilerleyin
    • Statik ve tembel yüklü biri arasında seçim yapabilirsiniz
    • PaginatorPaginatorBuilderClass’ların kendi çocuğunuzu oluşturarak daha fazla özelleştirilebilirlik elde edin
  • Bir nesne listesinden tamamen özelleştirilebilir seçim
    • Mesajlar veya tepkilerle çalışır
    • Kullanıcı girişini kolaylaştırır
    • BaseMessageSelectionBaseReactionSelectionSınıflarından kendi çocuğunuzu oluşturarak daha fazla özelleştirilebilirlik elde edin
  • Onayla

Kullanım

Discord Botu Yapımında Bu eklentinin sağladığı özellikleri düzgün kullanmak InteractivityService için servis sağlayıcınıza eklemeniz gerekir .

var provider = new ServiceCollection()
                .AddSingleton<InteractivityService>()
                .AddSingleton(new InteractivityConfig { DefaultTimeout = TimeSpan.FromSeconds(20) }) // İsteğe bağlı olarak özel bir yapılandırma ekleyebilirsiniz
                ....

Bu eklenti, ModuleBaseher komut çerçevesini desteklemek için bir özel içermez (Discord.Net.Command / Qmmands / …).

Bunun yerine DI kullanarak InteractivityService’i Modülünüze enjekte edin. (Yapıcı / Kamu Mülkü Enjeksiyonu)

Örnek: Mesajları / Tepkileri Beklemek

[Command("nextmessage")]
public async Task ExampleReplyNextMessageAsync()
{
    var result = await Interactivity.NextMessageAsync(x => x.Author.Id == Context.User.Id);

    if (result.IsSuccess) {
        Interactivity.DelayedSendMessageAndDeleteAsync(
                        Context.Channel,
                        deleteDelay: TimeSpan.FromSeconds(20), 
                        text: result.Value.Content, 
                        embed: result.Value.Embeds.FirstOrDefault());
    }
}

Örnek: Seçim

[Command("select")]
public async Task ExampleReactionSelectionAsync()
{
    var builder = new ReactionSelectionBuilder<string>()
        .WithSelectables(new Dictionary<IEmote, string>()
        {
            [new Emoji("💵")] = "Hi",
            [new Emoji("🍭")] = "How",
            [new Emoji("😩")] = "Hey",
            [new Emoji("💠")] = "Huh?!"
        })
        .WithUsers(Context.User)
        .WithDeletion(DeletionOptions.AfterCapturedContext | DeletionOptions.Invalids);

    var result = await Interactivity.SendSelectionAsync(builder.Build(), Context.Channel, TimeSpan.FromSeconds(50));

    if (result.IsSuccess)
    {
        await Context.Channel.SendMessageAsync(result.Value.ToString());
    }
}

Örnek: Sayfalandırma

[Command("paginator")]
public Task PaginatorAsync()
{
    var pages = new PageBuilder[] {
        new PageBuilder().WithTitle("I"),
        new PageBuilder().WithTitle("am"),
        new PageBuilder().WithTitle("cool"),
        new PageBuilder().WithTitle(":sunglasses:"),
        new PageBuilder().WithText("I am cool :crown:")
    };

    var paginator = new StaticPaginatorBuilder()
        .WithUsers(Context.User)
        .WithPages(pages)
        .WithFooter(PaginatorFooter.PageNumber | PaginatorFooter.Users)
        .WithDefaultEmotes()
        .Build();

    return Interactivity.SendPaginatorAsync(paginator, Context.Channel, TimeSpan.FromMinutes(2));
}

Örnek: Onay

[Command("confirm")]
public async Task ConfirmAsync()
{
    var request = new ConfirmationBuilder()
        .WithContent(new PageBuilder().WithText("Please Confirm"))
        .Build();

    var result = await Interactivity.SendConfirmationAsync(request, Context.Channel);

    if (result.Value)
    {
        await Context.Channel.SendMessageAsync("Confirmed :thumbsup:!");
    }
    else
    {
        await Context.Channel.SendMessageAsync("Declined :thumbsup:!");
    }
}

Sorun giderme

A MessageReceived handler is blocking the gateway task.

Discord Botu Yapımı

Bu hatayı alıyorsanız ve ağ geçidi görevinde çalışan komutlarda etkileşim kullanıyorsanız, komutlarınızın eşzamansız olarak çalıştığından emin olun (örneğin, RunMode = RunMode.Async kullanarak).

Herhangi bir hata almıyorsunuz, ancak tüm etkileşimli aramalar sonuç vermiyor ve zaman aşımına uğruyor.

Discord Botu Yapımı

InteractivityService Uygulamanız genelinde de kullanılanın örneğini oluşturmak için aynı istemciyi kullandığınızdan emin olun.

Bu da ilginizi çekebilir  Discord Botu Yapma Rehberi -2021 Klavuz

Discord.NET ile ilgili bu yazımıza da göz atın!

Teşekkürler Bunu zaten beğendin
Yorum yok