غلاف واجهة برمجة تطبيقات التفاعلات Discord التي لا تعتمد على WebSockets وبالتالي يمكن استخدامها في بيئة Webhook عديمة الجنسية.
علاوة على ذلك ، فإنه يسمح بفصل صارم بين بنية الأوامر الخاصة بك والبيانات التي يتم استلامها عند تشغيلها.
يتطلب بيثون 3.8+
pip install discord-interactions.pypip install git+https://github.com/LiBa001/discord-interactions.pyملحوظة
يتطلب التثبيت مباشرة من Github تركيب GIT على جهاز الكمبيوتر الخاص بك.
python -m pip install ...py -m pip install ... تم تصميم هذه المكتبة خصيصًا للعمل بسلاسة مع Flask microframework.
المثال الأكثر شبهاً بـ API مع امتداد Flask هو:
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 ),
) هنا ، نستخدم فئات ApplicationCommand البدائية ، Interaction InteractionResponse ، والتي توجد في هيكلها بشكل أساسي نظيرات نماذج API الأصلية.
لنجعل الأمر أكثر بساطة:
@ interactions . command ( echo_cmd )
def _echo ( interaction : Interaction ):
# different way of getting an option
msg = interaction . data . get_option ( "message" ). value
return msg الآن ، لا نحتاج إلى التعامل مع InteractionResponse بعد الآن ، ولكن بدلاً من ذلك فقط أعد محتوى الاستجابة كسلسلة. نوع الاستجابة ثم الافتراضات إلى InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE . يمكنك أيضًا إرجاع لا شيء ، إذا كنت لا ترغب في إرسال رد. يمكنك أيضًا إرجاع منطقية كقيمة ثانية ، مما يشير إلى ما إذا كان ينبغي عرض مكالمة الأوامر في Discord أم لا (أي الجزء _WITH_SOURCE من نوع الاستجابة). كما نحصل على الخيار عبر طريقة get_option Helper.
توفر هذه المكتبة طبقة تجريدية أخرى. مستوحى من مفهوم ORMs لقاعدة البيانات ، يحتوي على خريطة كائن (OCM) التي تتيح لك تحديد فئة لكل أمر سيعمل بعد ذلك كوصف هيكلي عام للأمر (مثل ApplicationCommand ) وحاوية للبيانات الفعلية التي يتم استلامها عند استدعاء الأمر (مثل Interaction ).
لذلك ، يبدو أن أبسط مثال ممكن هكذا:
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 إذا كنت ترغب في إرسال رسائل بعد الاستجابة الأولية ، فأنت بحاجة إلى إنشاء رسائل متابعة. لهذا الغرض ، يمكنك استخدام Decorator after_command ، الذي يسجل وظيفة يتم استدعاؤها بعد إرجاع وظيفة الأمر الفعلي. تحتاج الوظيفة إلى اتخاذ معلمة واحدة تمامًا ، وهي AfterCommandContext ، والتي تحتوي على العديد من الأشياء ، مثل Interaction 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" ) يمكنك أيضًا تسجيل عمليات الاسترداد لمكونات الرسائل ، مثل الأزرار. يتم تسجيل المكونات وتحديدها بواسطة custom_id .
@ interactions . component ( "my_button" )
def my_button_handler ( ctx : ComponentContext ):
return f" { ctx . interaction . user . username } clicked the button" لمزيد من الأمثلة على الميزات المختلفة ، ألقِ نظرة على الأمثلة.
إذا كنت ترغب في معرفة كيفية جعل Bot Discord يعمل مع أوامر Slash وكيفية إعداد كل شيء ، ألقِ نظرة على مشروع المثال. يستضيف البرنامج في بيئة بدون خادم عبر Google Cloud Run ويوفر أيضًا روبوتًا تجريبيًا ، بحيث يمكنك تجربة أوامر Slash في خادم Discord الخاص بك. تحقق من ذلك لمعرفة المزيد!