不依赖Websocket的Discord Interactions API的包装器,因此可以在无状态的Webhook环境中使用。
此外,它允许在命令的结构和触发它时收到的数据之间进行严格的分离。
需要Python 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 ... 该库是专门设计的,可与烧瓶小框架无缝合作。
烧瓶扩展名最类似API的示例是:
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 。如果您不想发送答复,也可以返回。您还可以简单地将布尔值作为第二个值返回,以指示是否应在不和谐中显示命令调用(即响应类型的_WITH_SOURCE部分)。另外,我们通过get_option助手方法获得了选项。
但是,该库提供了另一个抽象层。受数据库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如果您想在初始响应后发送消息,则需要创建后续消息。为此,您可以使用after_command Decorator,该命令返回后要调用的函数。该函数需要精确地采用一个参数,即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" 有关不同功能的更多示例,请查看示例。
如果您想知道如何使您的Discord Bot与Slash命令一起使用以及如何设置所有内容,请查看此示例项目。它通过Google Cloud运行在无服务器环境中托管该程序,还提供了一个演示机器人,因此您可以在Discord Server中尝试使用Slash命令。检查一下以了解更多!