from __future__ import annotations from typing import Any TELEGRAM_MESSAGE_ACTIONS: dict[str, dict[str, Any]] = { "send": { "status": "implemented", "description": "发送消息到指定聊天", "api": "sendMessage", }, "sendAttachment": { "status": "implemented", "description": "发送图片/视频/音频/文件/语音 附件消息", "api": "sendPhoto / sendVideo / sendAudio / sendDocument / sendVoice", }, "sendMediaGroup": { "status": "implemented", "description": "发送媒体组消息(多张图片/视频批量发送)", "api": "sendMediaGroup", }, "sendLocation": { "status": "implemented", "description": "发送位置信息", "api": "sendLocation", }, "sendContact": { "status": "implemented", "description": "发送联系人信息", "api": "sendContact", }, "sendPoll": { "status": "implemented", "description": "发送投票", "api": "sendPoll", }, "sendSticker": { "status": "implemented", "description": "发送贴纸", "api": "sendSticker", }, "sendDice": { "status": "implemented", "description": "发送骰子/飞镖等表情互动", "api": "sendDice", }, "sendInvoice": { "status": "unsupported", "description": "发送支付账单", "api": "sendInvoice", }, "sendGame": { "status": "unsupported", "description": "发送HTML5游戏", "api": "sendGame", }, "reply": { "status": "implemented", "description": "回复指定消息(通过 reply_to_message_id 参数)", "api": "sendMessage + reply_to_message_id", }, "forward": { "status": "implemented", "description": "转发消息", "api": "forwardMessage", }, "copy": { "status": "implemented", "description": "复制消息到其他聊天(不转发展示来源)", "api": "copyMessage", }, "edit": { "status": "implemented", "description": "编辑已发送的文本消息", "api": "editMessageText", }, "editCaption": { "status": "implemented", "description": "编辑已发送媒体的标题", "api": "editMessageCaption", }, "editMedia": { "status": "unsupported", "description": "替换已发送的媒体附件内容", "api": "editMessageMedia", }, "editInline": { "status": "implemented", "description": "更新 Inline Keyboard 按钮", "api": "editMessageReplyMarkup", }, "delete": { "status": "implemented", "description": "删除消息(Bot 能删除 48h 内的消息)", "api": "deleteMessage", }, "pin": { "status": "implemented", "description": "置顶消息(需要置顶权限)", "api": "pinChatMessage", }, "unpin": { "status": "implemented", "description": "取消置顶消息", "api": "unpinChatMessage", }, "unpinAll": { "status": "implemented", "description": "取消所有置顶消息", "api": "unpinAllChatMessages", }, "react": { "status": "implemented", "description": "发送emoji 反应(Bot API 7.0+)", "api": "setMessageReaction", }, "typing": { "status": "implemented", "description": "显示输入状态(打字/上传文件等)", "api": "sendChatAction", }, "thread": { "status": "implemented", "description": "创建论坛主题(Forum Topic)", "api": "createForumTopic", }, "closeThread": { "status": "implemented", "description": "关闭 Forum Topic", "api": "closeForumTopic", }, "reopenThread": { "status": "implemented", "description": "重新打开已关闭的 Forum Topic", "api": "reopenForumTopic", }, "deleteThread": { "status": "implemented", "description": "删除 Forum Topic", "api": "deleteForumTopic", }, "streamChunk": { "status": "implemented", "description": "流式输出消息(通过消息编辑逐步展示)", "api": "editMessageText (streaming)", }, "inlineButtons": { "status": "implemented", "description": "发送内联按钮(InlineKeyboardMarkup)", "api": "InlineKeyboardMarkup + CallbackQuery", }, "replyMarkup": { "status": "implemented", "description": "发送自定义回复键盘", "api": "ReplyKeyboardMarkup", }, "forceReply": { "status": "implemented", "description": "强制用户回复", "api": "ForceReply", }, "addParticipant": { "status": "unsupported", "description": "添加成员到群组(Bot API 不支持)", "api": "N/A", }, "removeParticipant": { "status": "unsupported", "description": "从群组移除成员(Bot API 不支持)", "api": "N/A", }, "kick": { "status": "implemented", "description": "踢出群成员(先封禁再解封实现)", "api": "banChatMember + unbanChatMember", }, "ban": { "status": "implemented", "description": "封禁用户", "api": "banChatMember", }, "unban": { "status": "implemented", "description": "解封用户", "api": "unbanChatMember", }, "mute": { "status": "implemented", "description": "禁言群成员", "api": "restrictChatMember (can_send_messages=False)", }, "unmute": { "status": "implemented", "description": "解除禁言", "api": "restrictChatMember (can_send_messages=True)", }, "promoteAdmin": { "status": "implemented", "description": "提升成员为管理员", "api": "promoteChatMember", }, "demoteAdmin": { "status": "implemented", "description": "撤销管理员权限", "api": "promoteChatMember (reset)", }, "setPermissions": { "status": "implemented", "description": "设置群权限", "api": "setChatPermissions", }, "setChatPhoto": { "status": "implemented", "description": "设置群头像", "api": "setChatPhoto", }, "deleteChatPhoto": { "status": "implemented", "description": "删除群头像", "api": "deleteChatPhoto", }, "setTitle": { "status": "implemented", "description": "设置群标题", "api": "setChatTitle", }, "setDescription": { "status": "implemented", "description": "设置群描述", "api": "setChatDescription", }, "leave": { "status": "implemented", "description": "Bot 退出群聊", "api": "leaveChat", }, "inviteLink": { "status": "implemented", "description": "创建/导出群邀请链接", "api": "exportChatInviteLink / createChatInviteLink", }, "revokeInviteLink": { "status": "unsupported", "description": "撤销邀请链接", "api": "revokeChatInviteLink", }, "broadcast": { "status": "unsupported", "description": "群发消息(Telegram Bot API 不直接支持)", "api": "N/A", }, "getMe": { "status": "implemented", "description": "获取 Bot 基本信息", "api": "getMe", }, "getChat": { "status": "implemented", "description": "获取聊天基本信息", "api": "getChat", }, "getChatAdmins": { "status": "implemented", "description": "获取群组管理员列表", "api": "getChatAdministrators", }, "getChatMemberCount": { "status": "implemented", "description": "获取聊天成员数量", "api": "getChatMemberCount", }, "getChatMember": { "status": "implemented", "description": "获取指定成员信息", "api": "getChatMember", }, "downloadFile": { "status": "implemented", "description": "下载文件", "api": "getFile + file_path", }, "uploadFile": { "status": "implemented", "description": "上传文件", "api": "sendDocument (file upload)", }, } _TELEGRAM_ACTION_MAPPING: dict[str, str] = { "send": "send", "sendAttachment": "send_attachment", "sendMediaGroup": "send_media_group", "sendLocation": "send_location", "sendContact": "send_contact", "sendPoll": "create_poll", "sendSticker": "sticker", "sendDice": "send_dice", "reply": "reply", "forward": "forward", "copy": "copy", "edit": "edit", "editCaption": "edit_caption", "editInline": "edit_inline", "delete": "delete", "pin": "pin", "unpin": "unpin", "unpinAll": "unpin_all", "react": "react", "typing": "typing", "thread": "thread_create", "closeThread": "close_thread", "reopenThread": "reopen_thread", "deleteThread": "delete_thread", "streamChunk": "stream", "addParticipant": "add_participant", "removeParticipant": "remove_participant", "kick": "kick", "ban": "ban", "unban": "unban", "mute": "mute", "unmute": "unmute", "setTitle": "rename_group", "setChatPhoto": "set_group_icon", "deleteChatPhoto": "delete_chat_photo", "setDescription": "set_chat_description", "leave": "leave_group", "broadcast": "broadcast", "inviteLink": "invite_link", "getMe": "get_me", "getChat": "channel_info", "getChatAdmins": "role_info", "getChatMemberCount": "channel_list", "getChatMember": "member_info", "downloadFile": "download_file", "uploadFile": "upload_file", "setPermissions": "permissions", "promoteAdmin": "role_add", "demoteAdmin": "role_remove", "createEvent": "event_create", } def register_telegram_actions() -> None: from yuxi.channels.message_actions import ActionDeclaration, ActionRegistry, ActionStatus, MessageAction declarations: dict[MessageAction, ActionDeclaration] = {} for action_name, info in TELEGRAM_MESSAGE_ACTIONS.items(): mapped = _TELEGRAM_ACTION_MAPPING.get(action_name) if mapped is None: continue try: action_enum = MessageAction(mapped) except ValueError: continue status_str = info.get("status", "unsupported") status = { "implemented": ActionStatus.SUPPORTED, "planned": ActionStatus.PARTIAL, "unsupported": ActionStatus.UNSUPPORTED, }.get(status_str, ActionStatus.UNSUPPORTED) declarations[action_enum] = ActionDeclaration( action=action_enum, status=status, reason=info.get("description", ""), impl=info.get("api", ""), ) ActionRegistry.register_channel_actions("telegram", declarations)