可以将任何 Twitter 帐户源链接到电报频道的简单机器人
Twitter 到 Telegram 频道机器人 v2.0 (ttt)
该机器人的目标是利用 Twitter API v2.0 和 Telegram Bot API 将任何公共 Twitter 帐户的推文“无缝”复制到 Telegram 频道。
特征
- 可以将 Twitter 帐户源复制到多个 Telegram 频道。例如,您可以拥有 1 个 Twitter 帐户来发布到多个 Telegram 频道,或者 2 个以上单独的 Twitter 到 Telegram 对。
- 可以扩展和添加您自己的处理程序(管道)以进行 Twitter 提要操作。例如,如果您想对推文中的文本进行一些操作,或者您不需要在 Telegram 频道中查看任何带有猫的 gif,您可以按照您认为合适的方式处理每条推文。
- 我最终决定将此机器人作为一个独立的应用程序(!),尽管您仍然需要 php ^8.1 才能在您的计算机上运行脚本。
- 由于上一点,您现在可以在命令行上将所有必要的配置作为参数传递给机器人本身。
使用机器人之前
如果你想使用这个机器人,首先你需要在 Twitter 和 Telegram 端做一些准备。此应用程序可用于任何 Twitter 帐户。
- 创建电报频道。
- 创建电报机器人(通过@botfather),记住它是访问HTTP API的令牌。
- 将新创建的电报机器人添加到您选择的电报频道,并授予其访问“发布消息”的权限。注意:一个电报机器人可以添加到多个电报频道。
- 在developer.twitter上创建一个应用程序。
要求
PHP ^8.1
运行机器人本身
-
从命令行运行:
php ttt manage --help
这将打印机器人的帮助消息。
-
如果您想做这些事情,请将文件
.env
复制到文件并填写所有必要的变量或填写服务器上的环境变量。的值可以在developer.twitter上找到。 当您创建电报机器人时,应检索的值。.env.example
.env
TWITTER_*
TELEGRAM_ACCESS_TOKEN
-
如果您想使用机器人的可选参数,则填充值的相同方法适用于所有
--twitter-*
和--telegram-access-token
可选参数。 -
填写机器人所需的参数 (
<ids>
)。它应该是一个字符串,左侧是数字形式的 twitter id,右侧是电报频道 id,以:
(冒号)分隔。- Twitter 帐户 ID 是数字形式的 ID,要将您的帐户转换
@twitterid
为数字形式,您可以使用此网站。 - Telegram 频道 id 是 form 中的 id
@telegramchannelid
。
该必需参数 (
<ids>
) 可以重复多次。例如:php ttt manage "1111:@telegram1" "2222:@telegram2" "3333:@telegram3"
- Twitter 帐户 ID 是数字形式的 ID,要将您的帐户转换
发展
如果您想从源代码构建或帮助项目并修复一些错误或添加一些功能,您可以利用Dockerfile
项目中包含的功能。
- 在终端中运行
docker-compose up -d
。 - 运行
docker-compose exec app sh
登录容器。 - 如果您想构建应用程序,请运行
php ttt app:build <your-build-name>
. - 构建将位于该
build
文件夹中。
添加新管道(处理程序)
如果您想为推文添加一些自定义处理程序,例如向其中添加一些文本或删除将图像发布到 Telegram 频道的可能性,那么您可以添加自己的管道。
管道位于Pipelines
文件夹中,您可以在其中添加自己的PipelineFactory
管道来根据需要处理您的推文。PipelineFactory
有一个链Pipes
来处理推文内容。
推文处理的默认行为位于DefaultPipelineFactory
.
每个管道由处理推文不同部分并更改主要 DataHub
对象的管道组成。根据推文是否包含某些媒体(如视频、GIF、照片),它会更改DataHub
对象以表示结果TelegramPayload
。这有点像责任链模式。
例如,如果您想向文本添加某些内容或以某种方式对其进行格式化,您可以在默认之后添加自定义管道,TextPipe
以根据需要设置文本格式。
配置文件config/pipelines.php
有一个管道图。添加新管道时,您需要使用自定义名称在此文件中注册它。现在它只有一个名为 的管道 'default'
。
为了使用自定义管道,您需要在运行机器人时向机器人添加另一个可选参数。此参数的格式与所需参数的格式相同:左侧为电报 ID,右侧为pipelines.php
文件中的管道名称,以(冒号)分隔:
。例如:
php ttt manage 1111:@telegramchannelid --channel-pipeline=1111:customPipelineName