繁体   English   中英

我如何强制 Telegram Bot 先给用户写信(aiogram)?

[英]How can i force the Telegram Bot to write to the user first (aiogram)?

我正在尝试使用 Aiogram 通过机器人向频道的新人发送欢迎消息。 但是,如果他之前没有开始与机器人对话,我的机器人就找不到与用户的聊天。 这个问题有什么解决办法吗?

我已经设法处理新来者并将 ID 添加到数据库中,但是

`

@router.chat_member(ChatMemberUpdatedFilter(member_status_changed=(KICKED | LEFT | RESTRICTED)
                                            >>
                                            (ADMINISTRATOR | CREATOR | MEMBER)))
async def on_user_join(event: ChatMemberUpdated):
    with grpc.insecure_channel('') as channel:
        stub = sub_unsub_pb2_grpc.SubscribtionServiceStub(channel)
        timestamp = timestamp_pb2.Timestamp()
        timestamp.FromDatetime(datetime.now(tz=timezone.utc))
        request = sub_unsub_pb2.SubUnsubEvent(
            id=str(event.new_chat_member.user.id),
            channelId=str(event.chat.id),
            time=timestamp,
            subStatus='join'
        )

        response = sub_unsub_pb2.EventResponse()
        stub.TriggerEvent(request)

`

但是当我尝试发送消息时,会抛出找不到聊天的错误消息。 `

    await support_bot.send_message(
        user_id,
        f'Welcome to the channel!'
    )

`

这个问题的解决方案:

  • 是让机器人在用户 ID 添加到数据库后立即向用户传输消息。 这样,用户将开始与机器人进行讨论,并且当您尝试发送欢迎消息时,机器人将能够找到聊天。
  • 就是使用start命令,让新用户可以通过发送/start命令发起与bot的讨论。 此外,在启动命令处理程序中,您可以检查用户是否是新成员并发送欢迎消息。
  • 使用机器人的get_chat_member方法检查用户是否在频道中,该方法返回ChatMember object。如果此 object 的状态属性为isChatMember.CHAT_MEMBER_STATUS_LEFT ,则用户不再是频道成员,您不应该发送信息。
  • 使用message事件监听频道内用户发送的所有消息,判断用户是否为新用户,并发送欢迎消息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM