banghasan / framebot
用PHP编写的Telegram机器人框架。
Requires
- php: >=5.4
- ext-curl: *
This package is not auto-updated.
Last update: 2024-09-23 13:55:58 UTC
README
Telegram机器人框架,使用PHP编写,是已修改的PHPTelebot,以适应内部项目需求。
目的
作为III Bot Telegram - 最终版电子书的内容!
功能
- 简单易用。
- 支持长轮询和Webhook。
附加功能
- 支持会话初始化(用于会话)。
- 支持会话终止(用于会话存储等)。
需求
- cURL
- PHP 5.4+
- Telegram机器人API令牌 - 从@BotFather获取。
安装
使用Composer
使用Composer安装Framebot,在composer.json
文件中添加以下内容:
{ "require": { "banghasan/framebot": "*" } }
或者通过CLI运行以下命令
composer require banghasan/framebot
Composer将在./vendor/autoloader.php
中安装自动加载器。为了将其包含到代码中,请添加
require_once 'vendor/autoload.php';
从源代码安装
从GitHub下载Framebot,然后在你的脚本中包含FrameBot.php
。
require_once '/path/to/framebot/src/FrameBot.php';
用法
创建一个简单的机器人
<?php require_once './src/FrameBot.php'; $bot = new FrameBot('TOKEN', 'BOT_USERNAME'); // Bot username is optional, its required for handle command that contain username (/command@username) like on a group. // Simple command $bot->cmd('*', 'Hi, human! I am a bot.'); // Simple echo command $bot->cmd('/echo|/say', function ($text) { if ($text == '') { $text = 'Command usage: /echo [text] or /say [text]'; } return Bot::sendMessage($text); }); // Simple whoami command $bot->cmd('/whoami|!whoami', function () { // Get message properties $message = Bot::message(); $name = $message['from']['first_name']; $userId = $message['from']['id']; $text = 'You are <b>'.$name.'</b> and your ID is <code>'.$userId.'</code>'; $options = [ 'parse_mode' => 'html', 'reply' => true ]; return Bot::sendMessage($text, $options); }); $bot->run();
然后运行
php file.php
你还可以看到我的其他示例。
注意
- 如果函数参数多于一个,FrameBot将按空格分割文本。
- 如果你没有设置chat_id,机器人将向当前聊天发送消息。
- 如果你添加了选项reply => true,机器人将回复当前消息(只有当你没有设置自定义chat_id和reply_to_message_id时才有效)。
命令
使用$bot->cmd(<command>, <function>)
来处理命令。
// simple answer $bot->cmd('*', 'I am a bot'); // catch multiple commands $bot->cmd('/start|/help', function () { // Do something here. }); // call a function name function googleSearch($search) { // Do something here. } $bot->cmd('/google', 'googleSearch');
使用*来捕获任何命令。
文件上传
当输入命令/upload时,此代码将向用户发送照片。
// Simple photo upload $bot->cmd('/upload', function () { $file = '/path/to/photo.png'; // File path, file id, or url. return Bot::sendPhoto($file); });
事件
使用$bot->on(<event>, <function>)
来处理所有可能的FrameBot事件。
要处理内联消息,只需添加
$bot->on('inline', function($text) { $results[] = [ 'type' => 'article', 'id' => 'unique_id1', 'title' => $text, 'message_text' => 'Lorem ipsum dolor sit amet', ]; $options = [ 'cache_time' => 3600, ]; return Bot::answerInlineQuery($results, $options); });
此外,你也可以捕获多个事件
$bot->on('sticker|photo|document', function() { // Do something here. });
支持的事件
- * - 任何类型的消息
- text – 文本消息
- audio – 音频文件
- voice – 语音消息
- document – 文件(任何类型)
- photo – 照片
- sticker – 贴纸
- video – 视频文件
- contact – 联系数据
- location – 位置数据
- venue – 场地数据
- edited – 编辑后的消息
- pinned_message – 消息被固定
- new_chat_member – 新成员被添加
- left_chat_member – 成员被移除
- new_chat_title – 新聊天标题
- new_chat_photo – 新聊天照片
- delete_chat_photo – 聊天照片被删除
- group_chat_created – 群组已创建
- channel_chat_created – 频道已创建
- supergroup_chat_created – 超群组已创建
- migrate_to_chat_id – 群组已迁移到超群组
- migrate_from_chat_id – 超群组已从群组迁移
- inline - 内联消息
- callback - 回调消息
- game - 游戏
- channel - 频道
- edited_channel - 编辑后的频道帖子
带有自定义正则表达式的命令(高级)
创建一个命令: /regex 字符串 数字
$bot->regex('/^\/regex (.*) ([0-9])$/i', function($matches) { // Do something here. });
方法
FrameBot 方法
cmd(<命令>, <回答>)
处理命令。
on(<事件>, <回答>)
处理事件。
regex(<正则表达式>, <回答>)
为命令创建自定义正则表达式。
Bot::type()
返回 消息事件 类型。
Bot::message()
获取 消息属性。
Telegram 方法
FrameBot 使用标准的 Telegram Bot API 方法名称。
Bot::getMe()
?
这是一个测试您的机器人认证令牌的简单方法。
Bot::sendMessage(<文本>, <选项>)
?
使用此方法发送文本消息。
Bot::forwardMessage(<选项>)
?
使用此方法转发任何类型的消息。
Bot::sendPhoto(<文件路径 | 文件ID | URL>, <选项>)
?
使用此方法发送照片。
Bot::sendVideo(<文件路径 | 文件ID | URL>, <选项>)
?
使用此方法发送视频。
Bot::sendAudio(<文件路径 | 文件ID | URL>, <选项>)
?
使用此方法发送音频。
Bot::sendVoice(<文件路径 | 文件ID | URL>, <选项>)
?
使用此方法发送语音消息。
Bot::sendDocument(<文件路径 | 文件ID | URL>, <选项>)
?
使用此方法发送文档。
Bot::sendSticker(<文件路径 | 文件ID | URL>, <选项>)
?
使用此方法发送表情。
Bot::sendLocation(<选项>)
?
使用此方法发送地图上的点。
Bot::sendVenue(<选项>)
?
使用此方法发送场所信息。
Bot::sendContact(<选项>)
?
使用此方法发送电话联系人。
Bot::sendAction(<操作>, <选项>)
?
当您需要告诉用户机器人的某侧正在发生某些事情时,请使用此方法。
Bot::getUserProfilePhotos(<用户ID>, <选项>)
?
使用此方法获取用户的个人资料照片列表。
Bot::getFile(<文件ID>)
?
使用此方法获取有关文件的基本信息并准备下载。目前,机器人可以下载最多 20MB 大小的文件。
Bot::answerInlineQuery(<结果数组>, <选项>)
?
使用此方法发送对内联查询的答案。
Bot::answerCallbackQuery(<文本>, <选项>)
?
使用此方法来回复来自内联键盘发送的回调查询。
Bot::getChat(<chat_id>)
?
使用此方法获取聊天最新信息。
Bot::leaveChat(<chat_id>)
?
使用此方法使您的机器人离开群组、超群或频道。
Bot::getChatAdministrators(<chat_id>)
?
使用此方法获取聊天中的管理员列表。
Bot::getChatMembersCount(<chat_id>)
?
使用此方法获取聊天中成员的数量。
Bot::getChatMember(<options>)
?
使用此方法获取聊天成员的信息。
Bot::kickChatMember(<options>)
?
使用此方法将用户从群组或超群中踢出。
Bot::unbanChatMember(<options>)
?
使用此方法在超群中取消之前被踢出的用户。
Bot::editMessageText(<options>)
?
使用此方法编辑机器人发送或通过机器人发送的文本消息(对于内联机器人)。
Bot::editMessageCaption(<options>)
?
使用此方法编辑机器人发送或通过机器人发送的消息的标题(对于内联机器人)。
Bot::editMessageReplyMarkup(<options>)
?
使用此方法仅编辑机器人发送或通过机器人发送的消息的回复标记(对于内联机器人)。
Bot::sendGame(<game short name>, <options>)
?
使用此方法发送游戏。
Bot::setGameScore(<options>)
?
使用此方法设置指定用户在游戏中的分数。
Bot::getGameHighScores(<user id>, <options>)
?
使用此方法获取高分榜的数据。
Webhook安装
通过浏览器打开 https://api.telegram.org/bot<BOT TOKEN>/setWebhook?url=https://yourdomain.com/your_bot.php