先放一些效果图:
没人at:
屏幕截图 2022-07-09 220824.jpg
有人at:
屏幕截图 2022-07-09 220926.jpg
有一堆人at(极端案例):
屏幕截图 2022-07-09 220911.jpg
历程:
我接触mirai后写的几个练手插件基本都是Java原生功能,比如“现在XX地几点”:输入时区返回该时区时间(毕竟群内人并非同一时区),或者一些简单的触发关键字返回等。
有次见另一个群里的Python机器人支持的这个“谁at我”功能,就想也移植个过来。当时梳理鉴定逻辑时,什么全体成员或mirai码来鉴定at的部分都很好弄,结果开始写后被“保存该at进数据库”给卡住了。(只搞过Android的SQLite 2333,YAML不完全会而且感觉不大适合)
后来想了个土办法,拿XAMPP在本机搭建localhost和sql环境,然后用PHP去get内容。
比如提取at信息:
String url = "http://localhost/who_at_me/get.php"
+ "?group=" + sender.getGroup().getId()
+ "&user_id=" + sender.getUser().getId();
用OkHttp发出去。
$group = $_GET["group"];
$user_id = $_GET["user_id"];
然后拼出一个JSON出来返回。
(JSON就不配图了,要马赛克的地方太多了)
数据库结构 & 数据收集样本展示:
Screenshot 2022-07-09 at 22-10-02 localhost _ 127.0.0.1 _ who_at_me _ at_list phpMyAdmin 5.2.0.png
ID:Primary Key
timestamp:时间戳
group_id:群号
at_from:at人的群昵称
at_to:被at人的QQ号
at_message:整条含at的信息
at收集使用SimpleListenerHost,at查询使用JSimpleCommand。
最后使用Graphics2D绘图,转成ByteArray发出去。
打算回头把数据存储这块弄好后发插件区试试(
屏幕截图 2022-07-09 224437.jpg