跳转到主要内容

关键词回复

监听群消息关键词并自动回复。
class KeywordPlugin : PluginPackage() {
    override val id = "com.example.keyword"
    override val name = "关键词回复"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onGroupMessage(
            filter = Filters.groupKeyword("你好", "hello")
        ) { event ->
            val reply = message {
                at(event.sender.userId)
                text(" 你好!")
            }.build()
            
            messageApi?.sendGroupMessage(event.groupId, reply)
        }
    }
}

命令处理

处理以 / 开头的命令。
class CommandPlugin : PluginPackage() {
    override val id = "com.example.command"
    override val name = "命令插件"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onGroupMessage(
            filter = Filters.groupStartsWith("/")
        ) { event ->
            when {
                event.rawMessage == "/help" -> {
                    val help = message {
                        text("可用命令:\n")
                        text("/help - 帮助\n")
                        text("/ping - 测试\n")
                        text("/time - 时间")
                    }.build()
                    messageApi?.sendGroupMessage(event.groupId, help)
                }
                
                event.rawMessage == "/ping" -> {
                    val reply = message { text("Pong!") }.build()
                    messageApi?.sendGroupMessage(event.groupId, reply)
                }
                
                event.rawMessage == "/time" -> {
                    val time = java.time.LocalDateTime.now()
                        .format(java.time.format.DateTimeFormatter.ofPattern("HH:mm:ss"))
                    val reply = message { text("当前时间:$time") }.build()
                    messageApi?.sendGroupMessage(event.groupId, reply)
                }
            }
        }
    }
}

欢迎新成员

自动欢迎新加入的群成员。
class WelcomePlugin : PluginPackage() {
    override val id = "com.example.welcome"
    override val name = "欢迎插件"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onNotice(
            filter = { it is GroupIncreaseNotice }
        ) { event ->
            if (event is GroupIncreaseNotice) {
                val welcome = message {
                    at(event.userId)
                    text(" 欢迎加入本群!\n")
                    text("请阅读群公告了解群规")
                }.build()
                
                messageApi?.sendGroupMessage(event.groupId, welcome)
            }
        }
    }
}

自动同意好友请求

自动处理好友添加请求。
class AutoFriendPlugin : PluginPackage() {
    override val id = "com.example.autofriend"
    override val name = "自动加好友"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onRequest(
            filter = { it is FriendRequest }
        ) { event ->
            if (event is FriendRequest) {
                friendApi?.setFriendAddRequest(
                    flag = event.flag,
                    approve = true,
                    remark = "来自机器人"
                )
                
                delay(1000)
                
                val welcome = message {
                    text("你好!感谢添加我为好友")
                }.build()
                messageApi?.sendPrivateMessage(event.userId, welcome)
            }
        }
    }
}

图片发送

发送图片消息。
class ImagePlugin : PluginPackage() {
    override val id = "com.example.image"
    override val name = "图片插件"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onGroupMessage(
            filter = Filters.groupKeyword("来张图")
        ) { event ->
            val imageMsg = message {
                text("这是一张图片:\n")
                image("https://example.com/image.jpg")
            }.build()
            
            messageApi?.sendGroupMessage(event.groupId, imageMsg)
        }
    }
}

复读机

复读群消息。
class RepeatPlugin : PluginPackage() {
    override val id = "com.example.repeat"
    override val name = "复读机"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onGroupMessage(
            filter = Filters.groupStartsWith("复读:")
        ) { event ->
            val content = event.rawMessage.removePrefix("复读:")
            val reply = message { text(content) }.build()
            messageApi?.sendGroupMessage(event.groupId, reply)
        }
    }
}

管理员命令

检查权限并执行管理命令。
class AdminPlugin : PluginPackage() {
    override val id = "com.example.admin"
    override val name = "管理插件"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onGroupMessage(
            filter = Filters.groupStartsWith("/ban")
        ) { event ->
            if (event.sender.role == "admin" || event.sender.role == "owner") {
                val atSegments = event.message.filterIsInstance<OB11Segment.At>()
                
                atSegments.forEach { at ->
                    groupApi?.setGroupBan(
                        event.groupId,
                        at.data.qq.toLong(),
                        600
                    )
                }
                
                val reply = message { text("已执行禁言操作") }.build()
                messageApi?.sendGroupMessage(event.groupId, reply)
            } else {
                val reply = message { text("权限不足") }.build()
                messageApi?.sendGroupMessage(event.groupId, reply)
            }
        }
    }
}

签到系统

简单的签到积分系统。
class CheckInPlugin : PluginPackage() {
    override val id = "com.example.checkin"
    override val name = "签到插件"
    override val version = "1.0.0"
    
    private val points = mutableMapOf<Long, Int>()
    
    override suspend fun onBotContextReady() {
        pluginContext.onGroupMessage(
            filter = Filters.groupKeyword("签到")
        ) { event ->
            val userId = event.sender.userId
            val currentPoints = points.getOrDefault(userId, 0)
            points[userId] = currentPoints + 10
            
            val reply = message {
                at(userId)
                text(" 签到成功!\n")
                text("获得 10 积分\n")
                text("当前积分:${points[userId]}")
            }.build()
            
            messageApi?.sendGroupMessage(event.groupId, reply)
        }
        
        pluginContext.onGroupMessage(
            filter = Filters.groupKeyword("积分", "查询积分")
        ) { event ->
            val userId = event.sender.userId
            val currentPoints = points.getOrDefault(userId, 0)
            
            val reply = message {
                at(userId)
                text(" 当前积分:$currentPoints")
            }.build()
            
            messageApi?.sendGroupMessage(event.groupId, reply)
        }
    }
}

定时任务

使用协程实现定时任务。
class SchedulePlugin : PluginPackage() {
    override val id = "com.example.schedule"
    override val name = "定时任务"
    override val version = "1.0.0"
    
    private val scope = CoroutineScope(Dispatchers.Default + SupervisorJob())
    
    override suspend fun onBotContextReady() {
        scope.launch {
            while (isActive) {
                val now = java.time.LocalTime.now()
                if (now.hour == 12 && now.minute == 0) {
                    sendLunchReminder()
                }
                delay(60000) // 每分钟检查一次
            }
        }
    }
    
    private suspend fun sendLunchReminder() {
        val groupId = 123456789L
        val message = message {
            text("中午好!该吃午饭了~")
        }.build()
        
        messageApi?.sendGroupMessage(groupId, message)
    }
    
    override suspend fun onDisable() {
        scope.cancel()
    }
}

消息撤回

发送消息后自动撤回。
class RecallPlugin : PluginPackage() {
    override val id = "com.example.recall"
    override val name = "消息撤回"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onGroupMessage(
            filter = Filters.groupKeyword("测试撤回")
        ) { event ->
            val testMsg = message {
                text("这条消息将在 5 秒后撤回")
            }.build()
            
            val response = messageApi?.sendGroupMessageAwait(
                event.groupId,
                testMsg
            )
            
            if (response != null) {
                delay(5000)
                messageApi?.deleteMessage(response.data.messageId)
            }
        }
    }
}

组合过滤器

使用多个条件过滤消息。
class FilterPlugin : PluginPackage() {
    override val id = "com.example.filter"
    override val name = "过滤器示例"
    override val version = "1.0.0"
    
    override suspend fun onBotContextReady() {
        pluginContext.onGroupMessage(
            filter = Filters.and(
                Filters.groupKeyword("搜索"),
                Filters.fromGroup(123456789L)
            )
        ) { event ->
            val reply = message {
                text("在指定群中收到搜索关键词")
            }.build()
            
            messageApi?.sendGroupMessage(event.groupId, reply)
        }
        
        pluginContext.onGroupMessage(
            filter = Filters.or(
                Filters.groupKeyword("查询"),
                Filters.groupKeyword("搜索")
            )
        ) { event ->
            val reply = message {
                text("收到查询或搜索关键词")
            }.build()
            
            messageApi?.sendGroupMessage(event.groupId, reply)
        }
    }
}

注意事项

  • 所有示例代码需在 onBotContextReady() 中注册监听器
  • API 调用建议使用安全调用 ?. 避免空指针
  • 定时任务记得在 onDisable() 中取消
  • 示例代码仅供参考,实际使用时需根据需求调整
  • 建议添加异常处理和日志记录
  • 涉及数据存储的功能建议使用数据库或配置文件