Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

telegram群聊无法触发 #787

Closed
VectorZhao opened this issue May 8, 2023 · 7 comments
Closed

telegram群聊无法触发 #787

VectorZhao opened this issue May 8, 2023 · 7 comments
Labels
bug Something isn't working

Comments

@VectorZhao
Copy link

# # 群聊聊天前缀,在群聊中,符合下面的前缀【也】会响应,可以自己增减
prefix_group = [ "ai",]

群组拉入bot,@机器人以后发送消息并没有任何回复,私聊没有问题。
不知道是不是没有支持tg的群组功能

@VectorZhao VectorZhao added the bug Something isn't working label May 8, 2023
@lss233
Copy link
Owner

lss233 commented May 9, 2023

我这里没有问题,建议检查下是不是在 BotFather 禁止了接收群消息。

@VectorZhao
Copy link
Author

Screenshot_2023-05-09-17-11-25-51_948cd9899890cbd5c2798760b2b95377
Screenshot_2023-05-09-17-13-12-91_948cd9899890cbd5c2798760b2b95377

另外就是机器人可以被任何人使用,我测试了自己的小号,是可以直接聊天的。

@VectorZhao
Copy link
Author

我这里没有问题,建议检查下是不是在 BotFather 禁止了接收群消息。

已解决,将拉进群的bot设置为admin

@lss233
Copy link
Owner

lss233 commented May 9, 2023

另外就是机器人可以被任何人使用,我测试了自己的小号,是可以直接聊天的。

这很正常,你可以设置额度。

@VectorZhao
Copy link
Author

另外就是机器人可以被任何人使用,我测试了自己的小号,是可以直接聊天的。

这很正常,你可以设置额度。

tg的bot是可以通过代码实现授权的

@VectorZhao
Copy link
Author

要让您的 Telegram 机器人只与已授权用户聊天,您可以通过添加一些逻辑来实现此功能。下面是一些实现该功能的可能方法:

  1. 使用白名单

您可以维护一个包含所有已授权用户 ID 的白名单,并在机器人收到消息时检查发送者是否在白名单中。如果发送者不在白名单中,则可以向其发送一条消息,告知他们没有权限发送消息。

以下是一个示例代码片段,演示如何使用白名单来授权用户:

import telegram

# 在这里添加您允许的用户ID
authorized_users = [123456789, 987654321]

# 检查用户是否已授权
def is_authorized(user_id):
    return user_id in authorized_users

# 处理消息
def handle_message(update, context):
    user_id = update.message.from_user.id
    if not is_authorized(user_id):
        context.bot.send_message(chat_id=user_id, text="对不起,您没有权限发送消息。")
        return
    # 处理合法用户发送的消息
    # ...

# 设置处理程序并启动机器人
updater = telegram.ext.Updater(token='YOUR_TOKEN', use_context=True)
dispatcher = updater.dispatcher
dispatcher.add_handler(telegram.ext.MessageHandler(telegram.ext.Filters.text, handle_message))
updater.start_polling()
  1. 使用认证流程

您可以实现一个认证流程,使未经授权的用户无法与机器人交互。例如,您可以编写一个 /auth 命令,向用户发送一个链接,该链接将打开一个 Web 页面,要求用户登录并授权机器人访问其 Telegram 帐户。一旦用户完成认证流程,您可以将其 ID 添加到白名单中,以便他们可以与机器人交互。

以下是一个示例代码片段,演示如何使用认证流程来授权用户:

import telegram
import uuid

# 在这里添加您允许的用户ID
authorized_users = []

# 生成唯一的授权令牌
def generate_auth_token():
    return str(uuid.uuid4())

# 处理 /auth 命令
def handle_auth(update, context):
    # 生成唯一的授权令牌
    auth_token = generate_auth_token()
    # 将授权令牌与用户ID关联
    context.user_data['auth_token'] = auth_token
    context.user_data['user_id'] = update.message.from_user.id
    # 发送授权链接
    link = f"https://example.com/auth?token={auth_token}"
    context.bot.send_message(chat_id=update.message.chat_id, text=f"请点击此链接进行授权:{link}")

# 处理授权页面回调
def handle_auth_callback(update, context):
    user_id = context.user_data.get('user_id')
    if not user_id:
        return
    auth_token = context.user_data.get('auth_token')
    if not auth_token or auth_token != update.callback_query.data:
        return
    authorized_users.append(user_id)
    context.bot.send_message(chat_id=user_id, text="您已成功授权。")
    del context.user_data['auth_token']
    del context.user_data['user_id']

# 处理消息
def handle_message(update, context):
    user_id = update.message.from_user.id
    if not is_authorized(user_id):
        context.bot.send_message(chat_id=user_id, text="对不起,您没有权限发送消息。")
        return
    # 处理合法用户发送的消息
    # ...

# 设置处理程序并启动机器人
updater = telegram.ext.Updater(token='YOUR_TOKEN', use_context=True)
dispatcher = updater.dispatcher
dispatcher.add_handler(telegram.ext.CommandHandler('auth', handle_auth))
dispatcher.add_handler(telegram.ext.CallbackQueryHandler(handle_auth_callback))
dispatcher.add_handler(telegram.ext.MessageHandler(telegram.ext.Filters.text, handle_message))
updater.start_polling()

在此示例中,我们实现了一个 /auth 命令,该命令会向用户发送一个链接,要求他们在 Web 页面上进行身份验证。一旦用户完成身份验证,他们的 ID 将添加到授权用户列表中,从而允许他们与机器人交互。如果未经授权的用户尝试发送消息,则会收到一条错误消息。

请注意,在此示例中,我们使用了 Telegram 的 Inline Keyboard Markup 来处理授权页面回调。您可以根据需要使用其他方法来实现此功能。

@lss233
Copy link
Owner

lss233 commented May 10, 2023

你可以修改 platforms/telegram_bot.py 来实现此功能。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants