aedon/discord-bot

Discord 的 PHP 机器人实现。

0.9.1 2022-08-03 06:52 UTC

This package is auto-updated.

Last update: 2024-09-19 22:51:38 UTC


README

GitHub release Build Status GitHub license

用 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 创建