QQBot開發指南

👤 smartyi 📦 v1.0.0 ⭐ 4.4 ⬇️ 482 下載
💻 開發程式設計 免費 🔑 需 API Key

📖 技能介紹


name: qq-bot-messaging description: QQ 機器人訊息收發框架,基於 qq-botpy SDK。支援三種訊息場景:頻道 @ 訊息、C2C 私聊訊息、群 @ 訊息。提供完整的收發訊息模式、定時推送迴圈和啟動模板。當用戶需要開發 QQ 機器人、處理 QQ 頻道/群/私聊訊息、實現定時推送功能時使用。


QQ Bot Messaging Skill

基於 qq-botpy 的 QQ 機器人訊息收發框架。

安裝依賴

pip install qq-botpy

配置

建立 config.yaml

appid: "YOUR_APPID"
secret: "YOUR_SECRET"

三種訊息場景

1. 頻道 @ 訊息(Guild)

  • Intentpublic_guild_messages=True
  • 事件on_at_message_create(message: Message)
  • 訊息物件from botpy.message import Message

    想要更強大的技能外掛,就來小蔥技能站7w4.net看看吧。

  • 回覆await message.reply(content="...")
  • 主動傳送await self.api.post_message(channel_id=..., content=..., msg_id=message.id)
  • 使用者標識message.author.id,頻道:message.channel_id
  • 解析指令:訊息內容含 <@!botid> 字首,需先剔除(見 scripts/bot_utils.py 中的 parse_cmd()

2. C2C 私聊訊息

  • Intentpublic_messages=True
  • 事件on_c2c_message_create(message: C2CMessage)
  • 訊息物件from botpy.message import C2CMessage
  • 回覆await message._api.post_c2c_message(openid=..., msg_type=0, msg_id=message.id, content=...)
  • 使用者標識message.author.user_openid

3. 群 @ 訊息(Group)

  • Intentpublic_messages=True
  • 事件on_group_at_message_create(message: GroupMessage)
  • 訊息物件from botpy.message import GroupMessage
  • 回覆await message._api.post_group_message(group_openid=..., msg_type=0, msg_id=message.id, content=...)
  • 使用者標識message.author.member_openid,群:message.group_openid

C2C 和群訊息共用 public_messages=True,可同時監聽兩者。

定時推送迴圈

使用 asyncio.create_task() 啟動後臺協程實現定時推送:

task = asyncio.create_task(self._push_loop(key, message))
tasks[key] = task
# 取消:tasks.pop(key).cancel()

迴圈內用 await asyncio.sleep(seconds) 等待,用 try/except asyncio.CancelledError 優雅退出。

啟動模板

# Python 3.10+ 必須顯式建立 event loop
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

intents = botpy.Intents(public_guild_messages=True, public_messages=True)
client = MyBot(intents=intents)
client.run(appid=config["appid"], secret=config["secret"])

完整模板

scripts/bot_template.py,包含三種訊息處理器 + 定時推送的完整可執行示例。

常見問題

問題 原因 解決
RuntimeError: There is no current event loop Python 3.10+ 不再自動建立 loop 啟動前呼叫 asyncio.new_event_loop() + asyncio.set_event_loop()
收不到訊息 Intent 未開啟 C2C/群需要 public_messages=True,頻道需要 public_guild_messages=True
發訊息失敗 msg_id 過期(被動訊息有效期短) 定時推送需申請主動訊息許可權,或每次收到訊息後更新 msg_id

🤖 AI 評測

這個 Skill 質量不錯,功能覆蓋全面,文件清晰易懂,配套程式碼可直接使用。它支援頻道、群聊、私聊三種常見場景,還提供定時推送功能,非常實用。美中不足的是缺少配置檔案示例,某些細節說明可以更完善。總體上這是一個成熟度高、拿來就能用的開發工具,值得一試。

📊 多維度評分

適應性4.4
規範性4.2
有效性4.4
可靠性4.2
可信度5

📁 包含檔案 (3 個)

📄 SKILL.md 3.2 KB
📄 scripts/bot_template.py 9.7 KB
📄 scripts/bot_utils.py 1.5 KB