该机器人的目标是利用 Twitter API v2.0 和 Telegram Bot API 将任何公共 Twitter 帐户中的推文“无缝”复制到 Telegram 频道。
项目地址: https://github.com/Dornat/twitter-to-telegram-bot
特征
- 可以将 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 是表单中的 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