先放一些效果图:
没人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