lbiltech / telegram-git-notifier-app
用于从 Gitlab 和 Github 事件向 Telegram 发送通知的 PHP 应用
Requires
- php: ^8.1
- ext-json: *
- cslant/telegram-git-notifier: ^1.3.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^v3.37.1
- phpstan/phpstan: ^1.10.39
This package is auto-updated.
Last update: 2024-08-11 17:15:48 UTC
README
本包提供集成 Telegram 消息服务和 GitHub/GitLab 的能力。使用此包,您可以创建一个 Telegram 机器人,接收 GitHub 或 GitLab 事件的推送通知,并通过 Telegram 上的消息和按钮进行定制。
📝 信息
- 将 GitHub/GitLab 仓库的通知发送到 Telegram 机器人、群组、超级群组(多话题)和频道。
- 机器人必须使用 BotFather 创建
🎉 特性
- GitHub/GitLab 通知到 Telegram:该包允许您配置 Telegram 机器人以接收来自各种 GitHub/GitLab 事件的推送通知,包括提交、拉取请求、问题、发布等事件。
- 定制通知:您可以通过 Telegram 上的选项定制您想要接收的通知类型。
- 交互式按钮:该包支持在 Telegram 上创建交互式按钮,执行如启用或禁用通知等操作。
-
事件管理:您可以管理您希望接收通知的具体事件,以便您关注项目最重要的部分。
- 支持多平台:GitHub 和 GitLab。
- 在不同平台之间分别管理事件通知。
- 易于集成:该包提供 API 和用户友好的功能,用于创建 Telegram 机器人并将其链接到您的 GitHub/GitLab 账户。
- 支持多聊天:您可以将多个聊天 ID 添加到
.env
文件中。这些聊天 ID 将是您的群组、频道或用户的聊天 ID。您还可以添加 该机器人的聊天 ID 以接收来自机器人的入站通知。
- 对于高级用户,您可以使用以下功能
- 支持多话题:您可以将多个话题添加到
.env
文件中。这些话题将是您的超级群组的话题。
- 支持多话题:您可以将多个话题添加到
📋 要求
- PHP ^8.1
- Composer
- 核心: Telegram Git Notifier
🔧 安装
关于安装和配置,该项目根据您的偏好或系统兼容性提供两种不同的安装方式。
方法 1: 在系统上直接使用 Composer 安装(需要系统已安装 Composer,之前的 PHP 版本)
方法 2: 使用 Docker 安装(需要系统已安装 Docker,Docker Compose)
I. 安装和配置 🛠
请选择以下两种方式之一来设置项目。
方法 1:在系统上直接使用 Composer 安装 ⚙
首先,请通过 Composer 克隆和安装此项目
composer create-project cslant/telegram-git-notifier-app
运行上述命令后,您将在 telegram-git-notifier-app
目录下安装项目,并自动创建环境文件 .env
。
一些JSON文件将在storage
目录中自动创建。这些文件用于存储数据和为这个机器人提供功能。
1. 创建新的机器人
要创建新的机器人,您需要与BotFather进行对话并遵循几个简单的步骤。
- 与BotFather开启聊天并发送
/newbot
命令。 - 为您的机器人输入一个友好的名字。这个名字将在联系信息和其他地方显示。
- 为您的机器人输入一个唯一的用户名。它必须以
bot
结尾。例如:TetrisBot
或tetris_bot
。 - 复制由BotFather提供的HTTP API访问令牌,并将其粘贴到您的
.env
文件中。
TELEGRAM_BOT_TOKEN=123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ
2. 设置您的域名和SSL证书
我们建议您使用HTTPS来设置域名和webhook。您可以构建自己的服务器或使用如Heroku之类的服务。
在这个例子中,我们将使用localhost和ngrok来设置域名和webhook。
- 下载并安装ngrok。
- 转到此项目目录,并在终端中运行以下命令:
php -S localhost:8000
- 继续在终端中运行以下命令:
ngrok http 8000
- 复制ngrok提供的HTTPS URL,并将其粘贴到您的
.env
文件中。
TGN_APP_URL=https://123456789.ngrok.io
3. 获取您的聊天ID并将其添加到.env文件中
- 与您的机器人开启聊天。
- 向您的机器人发送任何消息。(此操作需要获取您的聊天ID)
- 转到以下URL:
<TGN_APP_URL>/webhooks/getUpdate.php
- 查找
"chat":{"id":
字段并复制其后的数字。这是您的聊天ID。 - 将聊天ID粘贴到您的
.env
文件中。
TELEGRAM_BOT_CHAT_ID=123456789
此时,源启动过程已完成,请跳过方式2,继续到II. 设置webhook步骤。
方式2:通过Docker安装 🐳
注意:此方式需要系统安装Docker和Docker Compose。
⚠ 如果您通过方式一设置了项目,请跳过此方式。 🚸
然后转到II. 设置webhook步骤继续。
首先,请克隆此项目并将环境文件.env.example
复制到.env
。
git clone git@github.com:cslant/telegram-git-notifier-app.git
cd telegram-git-notifier-app
cp .env.example .env
1. 更新环境变量
打开.env
文件并更新以下变量
PHP_VERSION_SELECTED=8.2 APP_PORT=3180 # You can customize the container name to suit your needs using GitHub and GitLab CONTAINER_NAME=tgn-app
注意
PHP_VERSION_SELECTED
变量是您想在容器中使用的PHP版本。APP_PORT
变量是容器的端口。(请勿设置与主机相同的端口)CONTAINER_NAME
变量是您想要创建的容器的名称。
2. 安装并运行容器
运行以下命令以安装和运行容器
bash ./docker.sh
一些JSON文件将在storage
目录中自动创建。这些文件用于存储数据和为这个机器人提供功能。
3. 创建新的机器人
要创建新的机器人,您需要与BotFather进行对话并遵循几个简单的步骤。
- 与BotFather开启聊天并发送
/newbot
命令。 - 为您的机器人输入一个友好的名字。这个名字将在联系信息和其他地方显示。
- 为您的机器人输入一个唯一的用户名。它必须以
bot
结尾。例如:TetrisBot
或tetris_bot
。 - 复制由BotFather提供的HTTP API访问令牌,并将其粘贴到您的
.env
文件中。
TELEGRAM_BOT_TOKEN=123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ
4. 设置您的域名和SSL证书
这种方式,我们使用容器中的代理和ngrok来设置域名和webhook
- 检查容器的代理:
docker inspect <CONTAINER_NAME>-nginx | grep IPAddress
注意:将
<CONTAINER_NAME>
替换为.env文件中的容器名称。
示例
- 下载并安装ngrok。
- 继续在终端中运行以下命令:
ngrok http <CONTAINER_IP>
注意:将
<CONTAINER_IP>
替换为步骤1中容器的IP地址。
示例
ngrok http 172.28.0.3
- 复制ngrok提供的HTTPS URL,并将其粘贴到您的
.env
文件中。
TGN_APP_URL=https://123456789.ngrok-free.app
5. 获取您的聊天ID并将其添加到.env文件中
- 与您的机器人开启聊天。
- 向您的机器人发送任何消息。(此操作需要获取您的聊天ID)
- 转到以下URL:
<TGN_APP_URL>/webhooks/getUpdate.php
- 查找
"chat":{"id":
字段并复制其后的数字。这是您的聊天ID。 - 将聊天ID粘贴到您的
.env
文件中。
TELEGRAM_BOT_CHAT_ID=123456789
II. 设置webhook
我们有两种设置webhook的方式
1. 从本项目设置webhook
设置好域名和SSL证书后,您需要为您的小助手设置webhook。
前往
<APP_URL>/webhooks/set.php
注意:将
<APP_URL>
替换为您的应用URL,并保存在.env文件中。
如果您看到以下消息,则表示webhook已成功发送。
{"ok":true,"result":true,"description":"Webhook was set"}
2. 从Telegram手动设置webhook
如果您想手动设置webhook,可以使用以下URL
https://api.telegram.org/bot<YourTelegramBotToken>/setWebhook?url=<APP_URL>
注意:将
<YourTelegramBotToken>
替换为您的小助手token,将<APP_URL>
替换为您的应用URL,并保存在.env
文件中。
III. 将您想接收通知的聊天ID添加到.env文件中
1. 将多个聊天ID添加到 .env
文件中。
这些聊天ID将是您的群组、频道或用户的聊天ID。
此外,您还可以添加 此小助手的聊天ID 来接收其自身的通知。
TELEGRAM_NOTIFY_CHAT_IDS="-978339113;-1001933979183"
2. 为带有高级用户的超级群组添加主题(线程ID)
您可以添加带有高级用户的超级群组主题(线程ID)。
这些主题将是您的超级群组的主题。
TELEGRAM_NOTIFY_CHAT_IDS="-978339113;-1001933979183:topic_1;"
3. 为带有高级用户的超级群组添加多个主题(线程ID)
您可以为每个带有高级用户的超级群组添加多个主题(线程ID)。
TELEGRAM_NOTIFY_CHAT_IDS="-978339113;-1001933979183:topic_1,topic_2;"
注意
- 请使用分号 ";" 分隔聊天ID
- 并使用冒号 ":" 分隔聊天ID和主题
- 如果您想添加多个主题,请使用逗号 "," 分隔
现在您的配置已完成。.env文件将如下所示
TGN_APP_NAME='Telegram GitHub/GitLab Notify Bot' # Set your app URL here (Required for the bot to work properly) TGN_APP_URL=https://123456789.ngrok.io TELEGRAM_BOT_TOKEN=6162840106:AAH3g20lMQIkG_wHHu8R_ngdtG541uzoq4 TELEGRAM_BOT_CHAT_ID=6872320129 # Set the chat IDs that will receive notifications here. # You can add the owner bot ID, group id, ... # ------------------------------------------------------- # Note: # Please use semicolon ";" to separate chat ids # And use a colon ":" to separate chat ID and thread ID # And use comma "," if you want to add multiple thread ids # ------------------------------------------------------- # The environment variable is expected to be in the format: # "chat_id1;chat_id2:thread_id2;chat_id3:thread_id3_1,thread_id3_2;..." TELEGRAM_NOTIFY_CHAT_IDS="-978339113;-1001933979183:2,13;6872320129" TIMEZONE=Asia/Ho_Chi_Minh PHP_VERSION_SELECTED=8.2 CONTAINER_NAME=tgn-bot APP_PORT=3180
🚀 使用方法
现在您可以向小助手发送消息,您将收到小助手的欢迎消息。
/start
如果您想检查菜单,可以向小助手发送以下消息。
/menu
🎊 到此为止,您的小助手配置过程已完成。您可以使用此小助手的所有功能。 🎉🎉
为了提高使用便捷性,让我们创建一个包含您所需命令列表的菜单。
请向小助手发送以下消息以创建菜单按钮。
/set_menu
现在您需要为GitHub和GitLab仓库添加Webhook,以接收通知。
📌 在GitHub仓库上添加Webhook以接收通知
- 前往您的仓库设置。
- 前往
Webhooks
部分。 - 点击
添加webhook
。 - 将
Payload URL
设置为<APP_URL>
。 - 将
Content type
设置为application/x-www-form-urlencoded
。 - 您想触发哪些事件来触发此webhook?选择
让我选择个别事件。
。 - 点击
Active
复选框和添加webhook按钮。 - 完成。当您的仓库有新事件时,您将收到通知。
以下是您将收到的第一个通知
📌 在GitLab仓库上添加Webhook以接收通知
- 前往您的仓库设置。
- 前往
Webhooks
部分。 - 点击
添加新webhook
。 - 将
URL
设置为<APP_URL>
。 - 选择任何
Trigger
。 - 点击
Enable SSL verification
复选框和添加webhook按钮。
注意:您可以为不同的仓库设置此webhook。请为每个仓库类似地设置webhook。
然后每当这些仓库出现事件时,此Telegram小助手将立即向您发送通知。