Flutter Discord交互插件discord_interactions的使用
Flutter Discord交互插件 discord_interactions
的使用
Features
Feature | Status |
---|---|
Manage Application Commands | Full support (unit-tested) |
Create message components | Full support (unit-tested) |
Respond to commands | Full support (unit-tested) |
File uploads | Full support (unit-tested) |
Supported APIs
API | Status |
---|---|
Audit Logs | Full support (unit-tested) |
Channels | Full support (mostly unit-tested) |
Emojis | Full support (unit-tested) |
Guilds | Full support (mostly unit-tested) |
Guild Scheduled Events | Full support (untested) |
Guild Templates | Full support (untested) |
Invites | Full support (unit-tested) |
Stage Instances | Full support (untested) |
Stickers | Full support (partially unit-tested) |
Users | Full support (unit-tested) |
Voice | Full support (unit-tested) |
Webhooks | Full support (untested) |
全量支持所有 Discord API 端点的计划正在进行中。
Getting Started
这个包是为了在无服务器平台上运行一个 Discord bot。下面是一个基于 Google Cloud Run 的示例,但其他支持运行 Dart 代码的提供商也可以工作。
示例项目结构
my_discord_bot/
├── lib/
│ ├── main.dart
│ └── credentials.dart
└── script/
└── create_commands.dart
创建应用和机器人
- 在 Discord Developer Portal 上创建一个应用。
- 为你的应用创建一个机器人。
- 使用 OAuth2 URL 生成器为机器人生成邀请链接,并将机器人邀请到一个服务器(Guild)。
- 对于基本交互机器人,只需
applications.commands
权限即可管理并响应应用程序命令。 - 如果需要进行权限管理和服务器管理等操作,则需要
bot
权限。 - 只有
applications.commands
权限的机器人不会显示在用户列表中。
- 对于基本交互机器人,只需
配置凭据
在 lib/credentials.dart
中配置你的凭据:
class Credentials {
static const applicationPublicKey = 'your-application-public-key';
static const applicationId = 'your-application-id';
static const botToken = 'your-bot-token';
static const userAgentUrl = 'your-user-agent-url';
static const guildId = 'your-guild-id';
}
部署
按照 Google Cloud Run 快速入门指南中的 Prerequisites
和 Build and deploy with a single command
步骤进行部署。
Usage
请求验证
首先,你需要验证所有发送给机器人的请求。你必须拒绝无效的请求。InteractionValidator
类可以帮助你完成这个任务。applicationPublicKey
来自你在 Discord 开发者门户上的应用页面。
import 'package:discord_interactions/discord_interactions.dart';
final validator = InteractionValidator(applicationPublicKey: Credentials.applicationPublicKey);
final valid = validator.validate(headers: request.headers, body: body);
if (!valid) {
return Response(401, body: 'invalid request signature');
}
响应 Ping 请求
其次,你必须用 pong 响应来回应 ping 请求。
final interaction = Interaction.fromJson(jsonDecode(body));
if (interaction.type == InteractionType.ping) {
return Response.ok(jsonEncode(InteractionResponse.pong()));
}
响应 Application Commands
现在你可以响应应用程序命令了。
final api = DiscordApi(
applicationId: Credentials.applicationId,
userAgent: DiscordUserAgent(
url: Credentials.userAgentUrl,
versionNumber: '1.0.0',
),
botToken: Credentials.botToken,
);
await api.interactions.createInteractionResponse(
interaction.id,
token: interaction.token,
response:
InteractionResponse.message(content: 'Hello, Discord Interactions!'),
);
创建命令
你可以通过运行 dart run script/create_commands.dart
来创建命令。
// script/create_commands.dart
import 'package:discord_interactions/discord_interactions.dart';
import '../lib/credentials.dart';
void main() async {
final api = DiscordApi(
applicationId: Credentials.applicationId,
userAgent: DiscordUserAgent(
url: Credentials.userAgentUrl,
versionNumber: '1.0.0',
),
botToken: Credentials.botToken,
);
await api.applications.commands.createGlobalCommand(
Command(
name: 'hello',
description: 'Say hello!',
options: [
Option(
type: OptionType.string,
name: 'name',
description: 'Your name',
required: true,
),
],
),
);
}
Additional Information
此包仍在开发中。如果你有任何建议或反馈,请在 GitHub 上提交问题。
更多关于如何本地测试 webhook bots 的信息可以参考 discord_interactions_test。
以上就是使用 discord_interactions
插件的基本指南,希望对你有所帮助!
更多关于Flutter Discord交互插件discord_interactions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Discord交互插件discord_interactions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用discord_interactions
插件的示例代码。这个插件允许你与Discord的交互API进行集成,处理命令、组件交互等。
首先,确保你的Flutter项目已经配置好,并且你已经添加了discord_interactions
插件到你的pubspec.yaml
文件中。
dependencies:
flutter:
sdk: flutter
discord_interactions: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你需要配置你的Discord应用,以启用交互功能,并获取所需的客户端ID和公钥。
以下是一个简单的Flutter应用示例,它使用discord_interactions
插件来处理来自Discord的交互:
import 'package:flutter/material.dart';
import 'package:discord_interactions/discord_interactions.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DiscordInteractionPage(),
);
}
}
class DiscordInteractionPage extends StatefulWidget {
@override
_DiscordInteractionPageState createState() => _DiscordInteractionPageState();
}
class _DiscordInteractionPageState extends State<DiscordInteractionPage> {
late DiscordInteractions discordInteractions;
@override
void initState() {
super.initState();
// 替换为你的客户端ID和公钥
final String clientId = 'YOUR_CLIENT_ID';
final String publicKey = 'YOUR_PUBLIC_KEY';
// 初始化DiscordInteractions实例
discordInteractions = DiscordInteractions(
clientId: clientId,
publicKey: publicKey,
onInteractionCreate: (InteractionCreateEvent event) {
// 处理交互事件
print('Received interaction: ${event.toJson()}');
// 示例:回复一个ping命令
if (event.type == InteractionType.ping) {
event.respondWithPong();
} else if (event.type == InteractionType.applicationCommand) {
final commandName = event.data!.name;
if (commandName == 'example') {
event.respondWithMessage(content: 'Hello, this is an example response!');
}
}
},
);
// 登录并监听交互事件
discordInteractions.login();
}
@override
void dispose() {
// 注销并停止监听
discordInteractions.logout();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Discord Interactions Example'),
),
body: Center(
child: Text('This Flutter app listens for Discord interactions.'),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 初始化
DiscordInteractions
实例:使用你的客户端ID和公钥进行初始化。 - 设置事件处理函数:在
onInteractionCreate
回调中处理不同类型的交互事件。在这个例子中,我们处理了ping命令和一个名为example
的自定义命令。 - 登录并开始监听:调用
discordInteractions.login()
开始监听来自Discord的交互事件。 - 注销并清理:在
dispose
方法中调用discordInteractions.logout()
来停止监听并清理资源。
请注意,你需要确保你的Discord应用已经在Discord开发者门户中配置了正确的回调URL,并且已经启用了交互功能。此外,你可能还需要在你的服务器上设置一个反向代理来处理Discord的签名验证,这通常是通过使用像@discordjs/rest
这样的库在Node.js环境中完成的,但在Flutter中,这个插件已经为你处理了大部分工作。
这个示例代码只是一个基础入门,你可以根据实际需求进行扩展和修改。