Skip to content

编写你的第一个功能插件 ​

恭喜你掌握了 SDK 的核心语法!现在就让我们把学到的一切融会贯通,从零写一个具备群聊互动、运势抽签和防刷屏机制的完整实用小工具吧!


目标功能设计 ​

我们要编写的脚本名为 fun_bot.py,它将拥有以下三大本领:

  1. 关键词运势签:收到 抽签 时,随机生成一条吉凶评价并艾特群友;
  2. 反弹戳一戳:当群友在群里双击戳 Bot 的头像时,Bot 会机智地反向戳回去或者娇憨吐槽;
  3. 撤回指令:当 Master(主人)发送 撤回 引用某条消息时,执行消息撤回。

完整可运行代码 (fun_bot.py) ​

python
# -*- coding: utf-8 -*-
import random
import asyncio
from developTools.adapters.websocket_adapter import WebSocketBot
from developTools.event.events import (
    GroupMessageEvent,
    PokeNotifyEvent
)
from developTools.message.message_chain import MessageChain
from developTools.message.message_components import Text, At

# 1. 建立正向 WebSocket 客户端连接
# 请确保你的 SnowLuma / NapCat 协议端开启了正向 ws 且端口匹配
bot = WebSocketBot(uri="ws://127.0.0.1:3001")

# 主人的 QQ 号
MASTER_ID = 1840094972

# 签文池
FORTUNE_LIST = [
    "大吉!今天出门可能会捡到猫猫或者好吃的草莓蛋糕哦~ 🍓",
    "中吉!写代码一次编译通过,完全没有 Bug!✨",
    "小吉!群友会给你发很多超有趣的表情包~",
    "末吉!今天适合窝在被窝里看番摸鱼呢...",
    "大凶!杂鱼~ 赶紧抱抱猫娘消消灾吧!❤"
]

# 2. 监听群消息事件
@bot.on(GroupMessageEvent)
async def handle_fortune(event: GroupMessageEvent):
    text = event.pure_text.strip()
    
    # 抽签功能
    if text in ["抽签", "今日运势"]:
        fortune = random.choice(FORTUNE_LIST)
        reply = MessageChain([
            At(qq=event.sender.user_id),
            Text(f"
🔮 【今日签文】
{fortune}")
        ])
        await bot.send(event, reply)
        bot.logger.info(f"为用户 {event.sender.user_id} 发放了运势签文")
        
    # 主人专属撤回测试
    elif text == "撤回" and event.sender.user_id == MASTER_ID:
        # 如果引用了某条消息
        if hasattr(event, "reply") and event.reply:
            target_mid = event.reply.message_id
            await bot.delete_msg(target_mid)
            await bot.send(event, "已遵从主人的吩咐撤回目标消息喵~")

# 3. 监听戳一戳事件
@bot.on(PokeNotifyEvent)
async def handle_poke(event: PokeNotifyEvent):
    # 如果被戳的人是 Bot 自己
    # 注意:event.target_id 为被戳者,event.user_id 为发起者
    if event.target_id == bot.id or event.target_id != event.user_id:
        poker_qq = event.user_id
        # 发送一段调皮吐槽
        await bot.send_group_msg(
            group_id=event.group_id,
            message=MessageChain([
                At(qq=poker_qq),
                Text(" 别戳啦!脸蛋都要被你戳肿了喵~ 爪子抓你哦!(•̀⤙•́ )")
            ])
        )

# 4. 启动机器人
if __name__ == "__main__":
    bot.logger.info("小助手启动中,等待协议端建立连接...")
    bot.run()

运行与测试 ​

  1. 确认协议端已运行在 ws://127.0.0.1:3001;
  2. 打开终端运行:python fun_bot.py;
  3. 在任意群聊中发送 抽签,机器人立刻带格式艾特你回签;
  4. 双击机器人的头像戳一戳,看看它俏皮的反击!

你看,利用 SDK 构建一个属于你自己的二次元聊天助手就是这么纯粹与简单!