Telegram Bot:转发来自私人群组的消息
Telegram Bot: Forwarding Messages from Private Group
有什么方法可以使用 Python / JS 转发我作为成员在私人只读组中收到的消息吗?我正在尝试使用 python-telegram-bot 进行设置,但似乎我必须将机器人添加到组中才能让它与组中发送的内容进行交互。但我不能因为我只是一个阅读/接收会员...
有没有办法不使用 Telegram API,而是使用某种 JS 浏览器自动化来转发这些内容?这是我唯一想到的...提前致谢!
使用 Telegram 机器人确实不可能 - 您必须将它们添加到群组中。但是,您可以使用所谓的“用户机器人”自动化您的个人帐户。 Here 是一篇关于他们的文章。
回答我自己的问题以防有人需要。
正如@CallMeStag 所指出的,需要一个支持“用户机器人”的库。这些是直接实现 MTProto 的库。
对于python,例如Pyrogram 很合适,也很容易使用。
首先,需要一个 API 密钥和 API 哈希来识别 Telegram 服务器上的 Python 脚本,以便在 MTProto 中进行通信。
https://my.telegram.org/auth?to=apps -> 使用您的凭据登录并创建一个“应用程序”。将它们定义为下面的 API_ID
和 API_HASH
。
现在,我使用此代码将消息从 SOURCE_CHAT
复制到 TARGET_chat
:
#!/usr/bin/env python3
from pyrogram import Client
from pyrogram import filters
# ~~~~~~ CONFIG ~~~~~~~~ #
ACCOUNT = "@xy"
PHONE_NR = '+49....'
# https://my.telegram.org/auth?to=apps
API_ID = 1111111
API_HASH = "your_hash"
# CHAT ID
SOURCE_CHAT = -11111
TARGET_CHAT = -22222
# ~~~~~~~~~~~~~~~~~~~~~~ #
app = Client(
ACCOUNT,
phone_number=PHONE_NR,
api_id=API_ID,
api_hash=API_HASH
)
# filters.chat(SOURCE_CHAT)
@app.on_message(filters.chat(SOURCE_CHAT))
def my_handler(client, message):
message.copy( # copy() so there's no "forwarded from" header
chat_id=TARGET_CHAT, # the channel you want to post to
caption="Copied from XYZ" # Caption
)
app.run()
为了找出源和目标的 CHAT_ID
,我暂时禁用了过滤器,并打印了消息。
@app.on_message()
def my_handler(client, message):
print(message)
这样做,使您能够:每当在特定组中收到消息时,您都可以找到 message.chat.id
(注意:负值!)。在上面的完整脚本中为 SOURCE_CHAT
和 TARGET_CHAT
配置那些。
编辑:
另一种获取所有对话的所有聊天 ID 而无需首先在 channel/group/private/chat:
中发送消息的选项
def getAllChatIDs():
for x in app.get_dialogs():
print (x.chat.type, x.chat.title, x.chat.id)
只要调用一次,你就会得到一个对话列表:)
有什么方法可以使用 Python / JS 转发我作为成员在私人只读组中收到的消息吗?我正在尝试使用 python-telegram-bot 进行设置,但似乎我必须将机器人添加到组中才能让它与组中发送的内容进行交互。但我不能因为我只是一个阅读/接收会员...
有没有办法不使用 Telegram API,而是使用某种 JS 浏览器自动化来转发这些内容?这是我唯一想到的...提前致谢!
使用 Telegram 机器人确实不可能 - 您必须将它们添加到群组中。但是,您可以使用所谓的“用户机器人”自动化您的个人帐户。 Here 是一篇关于他们的文章。
回答我自己的问题以防有人需要。
正如@CallMeStag 所指出的,需要一个支持“用户机器人”的库。这些是直接实现 MTProto 的库。
对于python,例如Pyrogram 很合适,也很容易使用。
首先,需要一个 API 密钥和 API 哈希来识别 Telegram 服务器上的 Python 脚本,以便在 MTProto 中进行通信。
https://my.telegram.org/auth?to=apps -> 使用您的凭据登录并创建一个“应用程序”。将它们定义为下面的 API_ID
和 API_HASH
。
现在,我使用此代码将消息从 SOURCE_CHAT
复制到 TARGET_chat
:
#!/usr/bin/env python3
from pyrogram import Client
from pyrogram import filters
# ~~~~~~ CONFIG ~~~~~~~~ #
ACCOUNT = "@xy"
PHONE_NR = '+49....'
# https://my.telegram.org/auth?to=apps
API_ID = 1111111
API_HASH = "your_hash"
# CHAT ID
SOURCE_CHAT = -11111
TARGET_CHAT = -22222
# ~~~~~~~~~~~~~~~~~~~~~~ #
app = Client(
ACCOUNT,
phone_number=PHONE_NR,
api_id=API_ID,
api_hash=API_HASH
)
# filters.chat(SOURCE_CHAT)
@app.on_message(filters.chat(SOURCE_CHAT))
def my_handler(client, message):
message.copy( # copy() so there's no "forwarded from" header
chat_id=TARGET_CHAT, # the channel you want to post to
caption="Copied from XYZ" # Caption
)
app.run()
为了找出源和目标的 CHAT_ID
,我暂时禁用了过滤器,并打印了消息。
@app.on_message()
def my_handler(client, message):
print(message)
这样做,使您能够:每当在特定组中收到消息时,您都可以找到 message.chat.id
(注意:负值!)。在上面的完整脚本中为 SOURCE_CHAT
和 TARGET_CHAT
配置那些。
编辑: 另一种获取所有对话的所有聊天 ID 而无需首先在 channel/group/private/chat:
中发送消息的选项def getAllChatIDs():
for x in app.get_dialogs():
print (x.chat.type, x.chat.title, x.chat.id)
只要调用一次,你就会得到一个对话列表:)