aedon / discord-bot
Discord 的 PHP 机器人实现。
0.9.1
2022-08-03 06:52 UTC
Requires
- php: >=7.4.0|^8.0
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- aedon/php-expectations: ^0.9.6
- psr/log: ^1.1.2
- ratchet/pawl: ^0.3.5
Requires (Dev)
- mikey179/vfsstream: ^1.6.8
- phpspec/prophecy-phpunit: ^2.0.1
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-19 22:51:38 UTC
README
用 PHP 编写的 Discord 机器人实现。使用此库来创建您自己的机器人。
- 集成 Discord WebSocket API(接收 Discord 的事件)
- 添加对 Discord REST API 的基本支持(向 Discord 发送命令)
- 支持 API v6
缺少的功能
- 无法恢复丢失的连接
- 不支持语音频道
要求
PHP 7.4+ 或 PHP 8.0+
所需扩展
- ext-curl
- ext-json
- ext-mbstring
启动您的机器人
您已经创建了一个 Discord 机器人,并且它现在在您的服务器上,但整天都是 离线 的... 让我们开始吧!
让您的机器人活跃起来
创建一个 PHP 文件并从命令行运行它。
<?php require('vendor/autoload.php'); $token = '<insert-your-bot-token>'; $loop = \React\EventLoop\Factory::create(); $bot = new \Aedon\DiscordBot\Service\DiscordBot($token); $bot->initialize($loop, new \Ratchet\Client\Connector($loop)); $loop->run();
尽管您的机器人现在不会做很多事情,但它实际上是在线的,并且应该在控制台中接收心跳事件。
订阅事件
机器人现在从 Discord 接收事件。您可以订阅特定事件或所有事件。在这个例子中,您将监听 MESSAGE_CREATE 事件。
class MySubscriber implements \Aedon\Discordbot\Event\EventSubscriberInterface { public function process(\Aedon\Discordbot\Event\EventInterface $event): void { print_r($event->getData('d')); } } // Create the bot $bot->subscribe(new MySubscriber(), 'MESSAGE_CREATE'); // Run the loop
让机器人在 Discord 中做一些事情
机器人库对 Discord REST API 有非常基本的支持,例如在 Discord 中创建消息。有关 Discord REST API 的更多信息,请参阅 文档。
将 RestApiSubscriberInterface 添加到您的订阅者中,它将获得对 REST API 对象的访问权限。
class MySubscriber implements \Aedon\Discordbot\Event\EventSubscriberInterface, \Aedon\DiscordBot\Rest\RestApiSubscriberInterface { private \Aedon\DiscordBot\Rest\RestApiInterface $restApi; public function process(\Aedon\Discordbot\Event\EventInterface $event): void { if ($event->getName() == 'MESSAGE_CREATE') { $data = $event->getData('d'); if (isset($data['content']) && $data['content'] == '/roll') { if (isset($data['channel_id']) && !empty($data['channel_id'])) { $this->restApi->post('/channels/' . $data['channel_id'] . '/messages', [ 'content' => 'Roll Result (1-6): ' . (int)mt_rand(1, 6), ]); } } } } public function setRestApi(\Aedon\DiscordBot\Rest\RestApiInterface $restApi): void { $this->restApi = $restApi; } }
机器人将监听 MESSAGE_CREATE 事件,当有人写入 "/roll" 时,它会向用户回复 "Roll Result (1-6): X"。
支持
加入 Discord: https://discord.gg/NEfRerY
Aedon Discord Bot 由 Michael "Striker" Berger 创建