exan/fenrir

Discord API & WS 包装器


README

Fenrir

PHP Discord 接口。

Fenrir Code Quality Fenrir Unit Tests

关于

Fenrir 是 Discord APIs/gateway 的一种简单包装。没有内置缓存,这需要用户自行实现。

如果您正在寻找更易于使用的东西,具有开箱即用的缓存,您可以考虑 DiscordPHP

Fenrir 严重依赖于 ReactPHP 进行异步操作。在深入研究之前,建议您了解异步 PHP 的基础知识。

示例机器人

use Ragnarok\Fenrir\Bitwise\Bitwise;
use Ragnarok\Fenrir\Constants\Events;
use Ragnarok\Fenrir\Discord;
use Ragnarok\Fenrir\Enums\Intent;
use Ragnarok\Fenrir\Gateway\Events\MessageCreate;
use Ragnarok\Fenrir\Rest\Helpers\Channel\MessageBuilder;

require './vendor/autoload.php';

$discord = new Discord('TOKEN');

$discord
    ->withGateway(Bitwise::from(
        Intent::GUILD_MESSAGES,
        Intent::DIRECT_MESSAGES,
        Intent::MESSAGE_CONTENT,
    ))
    ->withRest();

$discord->gateway->events->on(Events::MESSAGE_CREATE, function (MessageCreate $message) use ($discord) {
    if ($message->content === '!ping') {
        $discord->rest->channel->createMessage(
            $message->channel_id,
            (new MessageBuilder())
                ->setContent('pong!')
        );
    }
});

$discord->gateway->open(); // Nothing after this line is executed

仅REST示例

use Ragnarok\Fenrir\Discord;
use Ragnarok\Fenrir\Rest\Helpers\Channel\MessageBuilder;

require './vendor/autoload.php';

$discord = new Discord('TOKEN');
$discord->withRest();

$discord->rest->channel->createMessage(
    'channel-id',
    (new MessageBuilder())
        ->setContent('Hi there!')
);

(注意:仅使用REST意味着您将不会收到任何事件,并且您的机器人将显示为离线)

更多示例,请查看示例目录

支持

Fenrir 目前支持 PHP 8.1 到 8.3。测试应该可以通过每晚的 8.4 构建,但这不是一个支持的场景。

如果您在 Apache2/Nginx 等网络服务器环境中使用此软件,您可能需要仅使用 Fenrir 的 REST 功能。这些环境通常不允许长时间运行的过程。

不支持32位,尽管没有硬性限制。

贡献

欢迎贡献。您可以查找 @todo 以找到需要关注的内容。请确保尽可能编写测试,并确保您的代码符合 phpcs 配置。谢谢!

注意

当前底层的 HTTP 组件未来可能会发生变化。虽然可访问的 API 将保持相似,但在您的应用程序中应尽量避免手动使用它。