同步操作将从 ovo/wechat-bot-plugins 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
微信机器人插件合集
此模块以wechat-bot-plugin-base
作为父模块,该模块依赖wechat-bot-core
核心模块,同时依赖maven-shade
插件进行打包操作。
wechat-bot-plugin-ai
模块,监听文本消息事件,基于ai接口对接大模型,实现对微信消息的回复及聊天记录总结等功能。
wechat-bot-plugin-daily_news
模块,监听文本消息事件,基于第三方api,使用hutool-http下载每日新闻或每日吃瓜图片并进行回复。
关键词: 今日新闻
、今日吃瓜
wechat-bot-plugin-emoticon
模块,监听文本消息事件,通过消息中存在的关键词触发,回复表情包。
该插件包括命令执行器,可通过命令动态添加、删除表情包及关键词,亦可手动管理配置文件。
命令:
/emoticon list
/emoticon add <name> <emoticon_md5> <kerwords>
/emoticon remove <name>
/emoticon black <keywords>
wechat-bot-plugin-invite
模块通过监听好友请求事件或私聊消息事件,通过关键词触发,添加机器人好友时的验证信息或私聊机器人相应关键词,自动邀请好友进群。
通过配置文件配置关键词、对应群名称。
keyword: group_name
# 例如通过`wechat-bot`关键词邀请好友加入`协议版机器人催更群`
wechat-bot: 协议版机器人催更群
wechat-bot-plugin-kfc
模块,监听消息事件,通过关键词触发,回复kfc文案。插件优先从api获取文案,失败后会从本地json文件中获取。
关键词: kfc
、KFC
、肯德基
、疯狂星期四
、v我50
wechat-bot-plugin-memory
模块,监听消息事件,通过命令执行器,查看bot程序当前占用内存及清理内存。
命令:
/memory [-s|--show]
查看内存使用情况/memory [-c|--clear]
清理内存wechat-bot-plugin-reread
模块,人类的本质就是复读机。RereadListener
监听群组文本消息事件,
如果同一个群组中的文本消息与上次的相同,那么进行复读,发送同一条消息给群组。
wechat-bot-plugin-schedule
模块,通过命令执行器或手动配置,添加、删除定时任务。
命令:
/scheduler list
查看定时任务列表scheduler add [-n|--name]=<name> [-c|--cron]=<cron> [-k|--kerword]=<keyword> [-t|--targets]=<targets...>
添加定时任务,name为任务名称,cron为cron表达式(因命令行解析原因,空格需要使用[-+|.]代替)
,keyword为触发关键词,targets为目标群组名称(使用空格分隔)/scheduler remove <name>
删除定时任务/scheduler edit [-n|--name]=<name> [-c|--cron]=<cron> [-k|--kerword]=<keyword> [-t|--targets]=<targets...>
编辑定时任务,参考add命令配置文件示例:
daily-news:
name: 今日新闻
cron: 30 8 * * *
keyword: 每日新闻
targets:
- 协议版机器人催更群
wechat-bot-plugin-setu
模块,监听文本消息事件,通过关键词触发,回复相应图片。
发送图片频率太高会被微信限制,请不要频繁使用。(考虑后续添加间隔限制)
关键词:
来点黑丝
回复黑丝图片来点白丝
回复白丝图片看看腿
随机回复黑丝或白丝图片plmm
、漂亮妹妹
、来点美女
回复美女图片或视频来点帅哥
回复帅哥图片来点**
通过360图片搜索**,随机获取其中一张回复wechat-bot-plugin-statistics
模块,监听所有群组的消息事件,统计群组内消息发送情况,并根据关键词生成排行榜、词云、AI分析报告(依赖于ai插件)。
该插件依赖hutool-db:5.8.29
进行数据库操作(6.0去除了nosql的操作),依赖sqlite-jdbc
连接sqlite数据库(存储聊天记录),
依赖jedis
连接操作redis(统计发言数据、分词后的词频等),依赖hanlp
进行分词,依赖kumo-core
进行词云图片生成。
statistics:total:count::{groupName}
,value为群组消息数量。statistics:everone:count::{groupName}
,其中key为成员名称,value为成员发言总数。statistics:everyday:count::{groupName}
,其中key为日期,value为成员当天发言总数。statistics:today:count::{groupName}:{date}
,其中key为成员名称,value为成员今日发言总数,此哈希表保留31天。statistics:analyze::{messageType}
,value为消息类型对应的数量。tokenizer::{groupName}:{date}
,value为关键词,score为词频。注:
ai
插件,需要确保ai插件可以正常使用,否则将不会生成AI分析报告。关键词: 今日排行
、昨日排行
、本周排行
、本月排行
、历史排行
命令:
/statistics|stat <groupName> [-a|--add]=<members>
为群组添加可以查看排行的成员,支持添加多个成员,多个成员之间使用空格分隔。/statistics|stat <groupName> [-r|--remove]=<members>
为群组移除可以查看排行的成员,支持移除多个成员,多个成员之间使用空格分隔。配置文件示例:
wordcloud: # 启用词频统计及词云生成的群
- 机器人测试群
ai-analyze: # 启用AI分析报告的群
- 机器人测试群
wechat-bot-plugin-tips
模块,监听群组文本消息事件,当发送消息的成员配置了欢迎词,则发送欢迎词。
命令:
/tips add [-m|--member]=<member> [-t|--tip]=<tip>
为成员添加欢迎词,member为成员名称,tip为欢迎词。/tips edit [-m|--member]=<member> [-t|--tip]=<tip>
编辑成员欢迎词,member为成员名称,tip为欢迎词。/tips del [-m|--member]=<member>
移除成员欢迎词,member为成员名称。配置文件示例:
tips::timeout: 10 # 超时时间,单位分钟,当成员发言间隔大于该值时,才发送成员欢迎词
member_nick_name: tips # 成员昵称及欢迎词
将打包好的jar文件拷贝到plugins
目录下,重启bot或向bot发送指令/pm load <plugin-name>
(前提是已经加载了PluginManager
插件)即可。
确保你已经加载了PluginManager
插件,该插件提供了插件管理的相关命令:
/pm list
查看已加载的插件/pm help
查看插件帮助信息/pm load <plugin-name>...
加载插件/pm unload <plugin-name>...
卸载插件/pm reload <plugin-name>...
重新加载插件/pm info <plugin-name>...
查看插件信息/pm enable <plugin-name>...
启用插件,如果在群组中执行该命令,则是为该群组启用插件,否则为全局启用插件;/pm disable <plugin-name>...
禁用插件,如果在群组中执行该命令,则是为该群组禁用插件,否则为全局禁用插件;/cm <command> [-a|--add] <user>
命令添加指定命令可执行的用户。EventListener
类的support
方法或者onEvent
方法中添加权限判断。pom.xml
中已配置了插件依赖,无需手动添加依赖;pom.xml
中以x.ovo.wechat.bot:wechat-bot-plugin-base
作为父模块,wechat-bot-plugin-base
中引入了核心依赖并配置了打包方式;pom.xml
中引入x.ovo.wechat.bot:wechat-bot-core
,并配置maven shade
打包插件;插件中至少需要包含以下内容:
Plugin
类,实现onLoad
、getEventListener
、getCommandExcutor
方法,onLoad
方法为插件加载时调用,一般用于向
plugin/{plugin-name}
目录下创建配置文件,
getEventListener
方法返回事件监听器(可返回null),getCommandExcutor
方法返回命令执行器(可返回null);resources
中创建plugin.yml
文件,该文件为插件配置文件,插件加载时需要获取插件jar包中的该文件,必不可少:name: plugin-manager # 插件名称
version: 2.0.0 # 插件版本
priority: 10 # 优先级,值越小优先级越高越先执行,默认为10
main: x.ovo.wechat.bot.plugin.PmPlugin # 插件类
description: 插件管理器,用于插件管理,启用、禁用、加载、下载、重载插件 # 插件描述
authors: # 插件作者
- Ooops
Plugin
中的getEventListener
方法返回一个事件监听器,该监听器需要继承EventListener<E extends Event<S>, S>
并实现
boolean support(@NonNull E event, S source)
方法和boolean onEvent(@NonNull E event, S source)
。
泛型E
为事件类型,S
为事件源类型,事件监听器用于监听事件,当监听到事件时,会调用support
方法判断是否支持该事件,如果支持,则调用
onEvent
方法处理事件。
onEvent
方法需要返回一个boolean值,如果返回true,则表示事件监听器监听到事件并处理成功,否则表示事件处理失败。同时可自行选择是否需要重写
boolean executeNext()
方法,
如果onEvent
返回true
且executeNext
返回false
,则表示此监听器已正常处理某事件,不再执行后续的事件监听器,否则会继续执行后续监听器。
getCommandExcutor
方法返回一个命令执行器,该执行器需要继承CommandExecutor
。
CommandExecutor
中没有方法需要强制你去实现,命令行解析采用picocli,可参考官方文档进行开发。
CommandExecutor
中包含两个方法,你可以根据自己需要进行重写:
String noPermissionTip()
当发送命令的联系人没有执行权限时,返回的提示语,默认为“你没有权限执行此命令,请不要调皮”;boolean hasPermission(String user)
权限检查,根据发送命令的用户昵称判断该用户是否具有权限执行此命令。
默认逻辑为bot所有者和指定用户具有权限(可通过wecaht-bot-plugin-cm
插件提供的/cm <command> [-a|--add] <users>...
命令添加或自行修改配置文件
command_permission.json
)。在bot仓库中的wechat-bot-plugin
模块下,基础插件wechat-bot-plugin-cm
和
wechat-bot-plugin-pm
中的命令执行器采用了两种不同的实现形式,你可以参考进行开发。
因为获取配置文件的getConfig
方法声明于Plugin
类,该类位于wechat-bot-core
模块中,bot启动时由“app”类加载器加载该类,而配置类位于插件jar中,由插件对应的ClassLoader加载。
yaml配置文件在解析时会先解析为Java基础类或Map、List等类型,而在进行类型转换时,由于跨类加载器,导致出现
ClassDefinerNotFoundException
异常。本人能力有限,未能解决此问题,如有解决方案,欢迎提交PR。
因此在插件中使用配置文件时,不能自定义配置类,只能通过plugin.getConfig()
方法获取Map<String, Object>
类型对象后,再从map中取值。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。