Telegram Kotlin机器人无法接收表情消息反应问题
解决Telegram机器人无法接收消息表情反应的问题
问题原因
默认情况下,telegrambots-spring-boot-starter不会自动订阅message_reaction类型的更新,所以你的onUpdateReceived方法无法接收到表情反应的事件通知。
解决步骤
1. 开启消息反应更新权限
在Spring Boot配置文件(如application.properties)中添加以下配置,让机器人同时订阅消息和消息反应更新:
telegrambots.allowed-updates=message,message_reaction
如果是通过代码初始化机器人,也可以在机器人类中手动声明允许的更新类型:
override fun getBotToken(): String { return "你的机器人Token" } override fun getBotUsername(): String { return "你的机器人用户名" } override fun getAllowedUpdates(): MutableList<String> { return mutableListOf("message", "message_reaction") }
2. 修改onUpdateReceived方法处理表情反应
更新方法逻辑,识别消息反应事件,检查目标表情后执行删除操作:
override fun onUpdateReceived(update: Update) { // 保留原有普通消息处理逻辑 if (update.hasMessage()) { println("收到消息!") // 你的消息处理代码 } // 新增消息反应处理逻辑 if (update.hasMessageReaction()) { val reactionUpdate = update.messageReaction val chatId = reactionUpdate.chatId val messageId = reactionUpdate.messageId val reactions = reactionUpdate.reactions // 示例:判断是否包含指定删除表情🗑️(可替换为你需要的表情) val hasTargetReaction = reactions.any { it.emoji == "🗑️" } if (hasTargetReaction) { try { // 调用Telegram API删除对应消息 execute(DeleteMessage(chatId, messageId)) println("已删除消息ID: $messageId") } catch (e: TelegramApiException) { e.printStackTrace() } } } }
注意事项
- 确保机器人在目标聊天中拥有管理员权限,且具备删除消息的权限
- 表情字符串需与Telegram传递的完全一致,避免因编码或表情变体导致判断失败
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

