naftali1000/async_bot

异步Telegram机器人库

v2.1.8 2023-10-06 12:29 UTC

README

基于amphp的简单、灵活的异步库,用于Telegram机器人API。

注意:这是一个旧项目,编写得非常糟糕。我不建议使用它。

安装

  • 运行 composer require naftali100/async_bot

入门指南

server.php

require_once './vendor/autoload.php';

use bot_lib\Server; 

$server = new Server("127.0.0.1:8080"); // create server instance listening to port 8080
$server->load_file("bot.php"); // load the handlers in "bot.php" and store them in "bot.php" path
$server->load_file("bot1.php", "index"); // you can add second param for different path
$server->load_folder("folder", true); // load all files in a folder. the second param is whether to load recursively or not
$server->run();

bot.php

require_once './vendor/autoload.php';

use bot_lib\Config;
use bot_lib\Handler;
use bot_lib\Update;
use bot_lib\Filter;

$config = new Config;
$config->load("conf.json"); // can store token
$config->server_url = "http://loadlhost:8081/bot"; // if you using local telegram-bot-api

$handler = new Handler;
$handler->on_message(
    fn(Update $u) => $u->reply("hello"),
    Filter::Message('/start')
);

将webhook设置为 127.0.0.1:8080/you_bot_file_name.php(或传递给load_file的第二个参数中的自定义名称)。

您可以将 token 参数添加到webhook URL,服务器将设置并使用此token。

运行 php server.php

examples文件夹中有更多处理器、配置和服务器选项。

说明

库中有5个主要对象

  1. Server: 扩展Loader。加载文件、运行http-server和激活处理器。
  2. Config: 配置。
  3. Update: 扩展API和HTTP。包含发送请求到机器人API的所有方法。
  4. Handler: 创建将异步运行的处理器。
  5. Filter: 静态方法以创建过滤器。

Server

服务器加载所有您的机器人文件,获取处理器,并运行一个服务器监听传入的请求。一旦服务器收到请求,它将激活请求路径中设置的处理器。您可以将任何请求路径设置为任何文件。

Handler

所有处理器在来自机器人的每个请求上异步运行。您可以设置各种处理器并控制它们如何激活。

要创建处理器,只需在处理器实例上调用方法,方法名为您想要的处理器名称 $handler->handler_name()

您可以给它任何名称(除了处理器类的名称)。名称可以控制处理器何时激活。

处理器接受4个参数

  • function(命名函数):处理器激活时运行的函数。接受Update实例作为参数。
  • filter:必须可调用。如果您传递了一个函数,它应该接收一个参数 - Update实例
  • last:如果为true且处理器被激活,则处理器将是当前请求中最后一个运行的处理器。
  • name:处理器的名称,对于调试什么处理器被激活很有用。

您可以通过顺序(函数、过滤器、last、name)或名称传递参数

$handler->on_message(
    filter: "blabal", 
    func: fn($u) => $u->reply("bla"),
    last: true,
    name: 'reply bla to blabla'
);

特殊处理器名称

此列表中的特殊处理器在特定TBD中激活。
  • before:在所有其他处理器之前激活。可以返回要运行的新函数数组,用于禁用所有处理器,通过返回空数组。
  • middle:在每个处理器之前运行。接受2个参数:Update和$next,它用于处理器函数。
  • after:在所有处理器完成后激活。对于清理或写入数据库很有用。
  • fallback:如果没有其他处理器被激活,则激活。
此列表中的特殊处理器在特定更新类型中激活。
  • on_update:在每次更新时激活。接受更新类型/s作为过滤器(消息、callback_query等)。
  • on_message:在'message'更新时激活。接受消息/s作为过滤器(/start、menu、word、test等)。
  • on_edit:在'edited_message'更新时激活。接受新消息/s作为过滤器。
  • on_cbq:在'callback_query'更新时激活。接受与callback_data匹配的文本作为过滤器。
  • on_file:当请求中有文件时激活(无论更新类型如何)。接受文件类型/s作为过滤器(照片、音频等)。
  • on_service:当更新是服务消息时激活,不接受字符串或数组过滤器,仅接受函数(字符串或数组会导致处理器不激活)。

Config

您可以根据需要配置各种设置,请参阅 src/config.php 文件。可以在 JSON 文件中设置,并使用上述示例中的 load 方法加载。

更新

此类中包含所有机器人 API 方法以及更多方法。此类实例被传递给处理程序。

Telegram API 方法 - https://core.telegram.org/bots/api#available-methods

添加的方法

  • reply: 回复消息。
  • delete: 删除消息。
  • ban: [仅限群组和频道] 禁止用户聊天。
  • leave: 离开群组或频道。
  • edit: 编辑消息。
  • forward: 将消息转发到另一个聊天,带信用或作为副本。
  • alert: 回复 callback_query。
  • download: 下载消息中的媒体。
  • editKeyboard: 编辑内联键盘。
  • editButton: 仅编辑一个内联按钮。

此外,还有很多预设变量用于许多更新部分。请参阅 update.php 文件。

变量

部分列表

  • chat: 消息发送的聊天。
  • from: 发送消息的用户。在私密消息中与 chat 相同。
  • updateType: 更新类型(消息、callback_query 等)。
  • cb_answered: callback_query 是否已回答。可以在 after 处理程序中用于如果未回答则回答。
  • service: 如果消息是服务消息。
  • media: 包含消息中的媒体。

您可以将更新作为对象或数组访问。 $u->message->chat->id$u['message']['chat']['id']

您可以选择跳过更新类型(上述示例中的 message)。

$u->data 将是回调更新中的回调数据。 $u->message_id 是 message_id。

加载器

Server 类扩展了 Loader。您不应直接使用它。

您可以加载文件、文件夹或处理程序。

额外访问

加载的文件可以更改其他机器人的处理程序。

使用 $this of bot_lib/Server 加载的文件中的处理程序。

Server 类的 files 属性包含以下内容

  • 路径
    • 文件名
    • 处理程序
    • 配置

每个由服务器加载的文件。

您可以在 examples 文件夹中查看使用额外访问可以做什么的示例。

辅助工具

包含静态辅助函数。

  • keyboard: 简单地创建内联键盘。请参阅注释了解如何使用。
  • permissions: 创建 ChatPermissions JSON。

调试

要启用服务器的调试日志,请这样做

use Psr\Log\LogLevel;

$server->setLogLevel(LogLevel::DEBUG);

要为每个机器人启用单独的日志记录,您可以在机器人文件中添加此内容

use Psr\Log\LogLevel;

$config->setLevel(LogLevel::DEBUG);