249 lines
9.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.yutou.qqbot.models.setu;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.yutou.qqbot.Annotations.UseModel;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.interfaces.DownloadInterface;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.HttpTools;
import com.yutou.qqbot.utlis.Log;
import com.yutou.qqbot.utlis.RedisTools;
import com.yutou.qqbot.utlis.StringUtils;
import net.mamoe.mirai.event.events.MessageEvent;
import net.mamoe.mirai.message.MessageReceipt;
import net.mamoe.mirai.message.data.At;
import net.mamoe.mirai.message.data.MessageChainBuilder;
import net.mamoe.mirai.message.data.QuoteReply;
import redis.clients.jedis.Jedis;
import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@UseModel
public class GetSeTu extends Model {
@Override
public boolean isUserPublic() {
return true;
}
@Override
public String[] getUsePowers() {
return new String[0];
}
@Override
public String getModelName() {
return "随机二次元图";
}
@Override
public void onTime(Long qq, String time) {
super.onTime(qq, time);
if ("00:00:00".equals(time)) {
del();
} else if (RedisTools.get("Setu_time", "23:59:00").equals(time)) {
send(qq);
}
}
private void del() {
Jedis redis = RedisTools.getRedis();
redis.select(RedisTools.QQBOT_USER);
Set<String> keys = redis.keys("Setu_*");
for (String key : keys) {
redis.del(key);
}
redis.close();
}
private void send(Long group) {
Jedis redis = RedisTools.getRedis();
redis.select(RedisTools.QQBOT_USER);
String ret = redis.get("Setu_"+group);
redis.close();
MessageChainBuilder builder = null;
if (!StringUtils.isEmpty(ret)) {
JSONArray array = JSON.parseArray(ret);
builder = new MessageChainBuilder();
builder.append("各位老色胚们晚上好,现在公布本群涩图数据!");
builder.append("\n");
builder.append("本群今日共查询:");
builder.append(String.valueOf(array.size()));
builder.append("次!\n");
builder.append("接下来公布大伙的XP系统");
builder.append("\n");
Map<Long, List<String>> map = new HashMap<>();
for (Object o : array) {
JSONObject item = (JSONObject) o;
List<String> tags = map.getOrDefault(item.getLong("user"), new ArrayList<>());
tags.add(item.getString("key"));
map.put(item.getLong("user"), tags);
}
Long maxQQ = -1L;
int max = -1;
for (Long qq : map.keySet()) {
builder.append("------------------\n");
List<String> list = map.get(qq);
if (list.size() > max) {
max = list.size();
maxQQ = qq;
}
builder.append(new At(qq))
.append(":\n");
for (String tag : list) {
if(StringUtils.isEmpty(tag)){
tag="随机";
}
builder.append(tag).append("\n");
}
builder.append("------------------\n");
}
builder.append("那么今日最色批的就是:");
builder.append(new At(maxQQ));
builder.append("\n");
builder.append("如果炸群了请找他(\n");
builder.append("明天见~");
}
if (builder != null) {
QQBotManager.getInstance().sendMessage(group, builder);
}
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
boolean isRun = false;
boolean isR18 = false;
if (msg.contains("来点") && msg.contains("色图")) {
isRun = true;
} else if (msg.contains("来点") && msg.contains("涩图")) {
isRun = true;
isR18 = true;
msg = msg.replace("涩图", "色图");
}
if (isRun) {
Log.i(event.getSource().getFromId() + " > " + msg);
Pattern pattern = Pattern.compile("来点(.*?)色图");
Matcher matcher = pattern.matcher(msg);
String key = null;
if (matcher.find()) {
key = matcher.group(1);
}
if (!getSeTu("tag", key, isR18, false, qq, event)) {
if (!getSeTu("tag", key, isR18, true, qq, event)) {
if (!getSeTu("keyword", key, isR18, true, qq, event)) {
QQBotManager.getInstance().sendMessage(qq, "找不到喵~ 不如随便来点吧~");
getSeTu("tag", null, false, false, qq, event);
}
}
}
JSONObject data = new JSONObject();
data.put("user", event.getSource().getFromId());
data.put("group", qq);
data.put("key", key);
String redis = RedisTools.get("Setu_" + qq);
JSONArray array = new JSONArray();
if (!StringUtils.isEmpty(redis)) {
array = JSON.parseArray(redis);
}
array.add(data);
RedisTools.set("Setu_" + qq, array.toString());
}
}
private boolean getSeTu(String model, String key, boolean r18, boolean fuzzyR18, Long qq, MessageEvent event) {
String url = "https://api.lolicon.app/setu/v2?r18=0&size=regular";
if (r18) {
url = "https://api.lolicon.app/setu/v2?r18=1&size=regular";
}
if (!StringUtils.isEmpty(key)) {
if ("tag".equals(model)) {
String[] keys = key.split(" ");
StringBuilder keyBuilder = new StringBuilder();
for (String _key : keys) {
keyBuilder.append(URLEncoder.encode(_key, StandardCharsets.UTF_8)).append("&tag=");
}
key = keyBuilder.toString();
key = key.substring(0, key.length() - 5);
} else {
key = URLEncoder.encode(key, StandardCharsets.UTF_8);
}
if (r18) {
url = "https://api.lolicon.app/setu/v2?" + model + "=" + key + "&r18=1&size=regular";
} else {
url = "https://api.lolicon.app/setu/v2?" + model + "=" + key + "&r18=0&size=regular";
}
}
if (fuzzyR18) {
url = url.replace("&r18=0", "&r18=2").replace("&r18=1", "&r18=2");
}
System.out.println("url = " + url);
String ret = HttpTools.get(url);
JSONObject json = JSON.parseObject(ret);
if (json.getJSONArray("data").size() == 0) {
return false;
}
JSONObject item = json.getJSONArray("data").getJSONObject(0);
StringBuilder builder = new StringBuilder();
builder.append(item.getString("title"));
builder.append("\n");
builder.append("P站ID:");
builder.append(item.getInteger("pid"));
builder.append("\n");
builder.append("R18:");
if (item.getBooleanValue("r18")) {
builder.append("YES!");
} else {
builder.append("NO~");
}
builder.append("\n");
builder.append("tags:");
for (Object tags : item.getJSONArray("tags")) {
builder.append(tags).append("");
}
HttpTools.download(item.getJSONObject("urls").getString("regular"),
System.currentTimeMillis() + "_setu.jpg",
true
, new DownloadInterface() {
@Override
public void onDownload(File file) {
super.onDownload(file);
builder.append("看不到图?点这里:http://setu.cnmglz.com/setu/").append(file.getName());
QQBotManager.getInstance().sendMessage(file, qq, event.getMessage(), "");
MessageChainBuilder chain = new MessageChainBuilder();
chain.append(new QuoteReply(event.getMessage()));
chain.append(builder.toString());
MessageReceipt<?> message=QQBotManager.getInstance().sendMessage(qq,chain);
Log.i(getModelName(),message);
}
@Override
public void onError(Exception e) {
super.onError(e);
QQBotManager.getInstance().sendMessage(qq, "获取失败喵~");
e.printStackTrace();
}
});
return true;
}
public static void main(String[] args) {
String msg = "来点1色图";
Pattern pattern = Pattern.compile("来点(.*?)色图");
Matcher matcher = pattern.matcher(msg);
String key = null;
if (matcher.find()) {
key = matcher.group(1);
}
System.out.println("key = " + key);
}
}