Pembungkus untuk API Interaksi Perselisihan yang tidak mengandalkan websockets dan karenanya dapat digunakan dalam lingkungan webhook tanpa kewarganegaraan.
Selain itu, ini memungkinkan pemisahan yang ketat antara struktur perintah Anda dan dan data yang diterima saat memicu.
Membutuhkan Python 3.8+
pip install discord-interactions.pypip install git+https://github.com/LiBa001/discord-interactions.pyCatatan
Menginstal langsung dari GitHub mengharuskan Anda menginstal git di komputer Anda.
python -m pip install ...py -m pip install ... Perpustakaan ini secara khusus dirancang untuk bekerja mulus dengan mikroframework flask.
Contoh paling seperti API dengan ekstensi Flask adalah ini:
from discord_interactions . flask_ext import Interactions
from discord_interactions import (
ApplicationCommand ,
ApplicationCommandOption ,
ApplicationCommandOptionType ,
Interaction ,
InteractionResponse ,
InteractionResponseType ,
InteractionApplicationCommandCallbackData ,
)
from flask import Flask
import os
app = Flask ( __name__ )
interactions = Interactions ( app , os . getenv ( "CLIENT_PUBLIC_KEY" ))
echo_cmd = ApplicationCommand ( "echo" , "what goes around comes around" )
echo_cmd . add_option (
ApplicationCommandOption (
type = ApplicationCommandOptionType . STRING ,
name = "message" ,
description = "This will be echoed." ,
required = True ,
)
)
@ interactions . command ( echo_cmd )
def _echo ( interaction : Interaction ):
msg = interaction . data . options [ 0 ]. value # "message" option content
return InteractionResponse (
type = InteractionResponseType . CHANNEL_MESSAGE_WITH_SOURCE ,
data = InteractionApplicationCommandCallbackData ( content = msg ),
) Di sini, kami menggunakan kelas ApplicationCommand yang belum sempurna, kelas Interaction dan InteractionResponse , yang berada dalam strukturnya pada dasarnya rekan -rekan yang tepat dari model API asli.
Mari kita buat sedikit lebih sederhana:
@ interactions . command ( echo_cmd )
def _echo ( interaction : Interaction ):
# different way of getting an option
msg = interaction . data . get_option ( "message" ). value
return msg Sekarang, kita tidak perlu berurusan dengan InteractionResponse lagi, tetapi sebaliknya mengembalikan konten respons sebagai string. Jenis respons kemudian default ke InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE . Anda juga tidak bisa mengembalikan tidak ada, jika Anda tidak ingin mengirim tanggapan. Anda juga dapat mengembalikan boolean sebagai nilai kedua, menunjukkan apakah panggilan perintah harus ditampilkan atau tidak di perselisihan (yaitu bagian _WITH_SOURCE dari jenis respons). Kami juga mendapatkan opsi melalui metode helper get_option .
Perpustakaan ini menyediakan lapisan abstraksi lain. Terinspirasi oleh konsep ORM basis data, ia memiliki objek-komandan mapper (OCM) yang memungkinkan Anda mendefinisikan kelas untuk setiap perintah yang kemudian akan berfungsi sebagai deskripsi struktural generik dari perintah (seperti ApplicationCommand ) dan wadah untuk data aktual yang diterima ketika perintah dipanggil (seperti Interaction ).
Jadi, contoh paling sederhana terlihat seperti ini:
from discord_interactions . flask_ext import Interactions
from discord_interactions . ocm import Command , Option
from flask import Flask
import os
app = Flask ( __name__ )
interactions = Interactions ( app , os . getenv ( "CLIENT_PUBLIC_KEY" ))
class _Echo ( Command ):
""" what goes around comes around """
message : str = Option ( "This will be echoed." , required = True )
@ interactions . command
def _echo ( cmd : _Echo ):
return cmd . message Jika Anda ingin mengirim pesan setelah respons awal, Anda perlu membuat pesan tindak lanjut. Untuk tujuan ini Anda dapat menggunakan dekorator after_command , yang mendaftarkan fungsi yang akan dipanggil setelah fungsi perintah yang sebenarnya telah dikembalikan. Fungsi perlu mengambil tepat satu parameter, AfterCommandContext , yang berisi beberapa hal, seperti Interaction dan interaksi awal InteractionResponse .
interactions = Interactions ( app , PUBLIC_KEY )
@ interactions . command ( "delay" )
def delay ( _ : Interaction ):
return "starting countdown" , True # this message is ephemeral
@ delay . after_command
def after_delay ( ctx : AfterCommandContext ):
delay_time = ctx . interaction . data . options [ 0 ]. value
time . sleep ( delay_time )
ctx . send ( f" { delay_time } seconds have passed" ) Anda juga dapat mendaftarkan panggilan balik untuk komponen pesan, seperti tombol. Komponen didaftarkan dan diidentifikasi oleh custom_id mereka.
@ interactions . component ( "my_button" )
def my_button_handler ( ctx : ComponentContext ):
return f" { ctx . interaction . user . username } clicked the button" Untuk lebih banyak contoh fitur yang berbeda, lihat contoh.
Jika Anda ingin tahu cara membuat Bot Perselisihan Anda berfungsi dengan perintah Slash dan cara mengatur semuanya, lihatlah proyek contoh ini. Ini meng -host program di lingkungan tanpa server melalui Google Cloud Run dan juga menyediakan bot demo, sehingga Anda dapat mencoba perintah slash di server Discord Anda. Lihat untuk mempelajari lebih lanjut!