mirror of
https://github.com/LamGC/ContentGrabbingJi.git
synced 2025-04-30 06:37:36 +00:00
[Add] RandomRankingArtworksSender 增加参数;
[Add] BotAdminCommandProcess 增加更多可自定义的参数项, 增加json配置项常量;
This commit is contained in:
parent
a1e54e70d9
commit
aaa1bc932b
@ -8,6 +8,7 @@ import com.google.gson.reflect.TypeToken;
|
|||||||
import net.lamgc.cgj.bot.message.MessageSenderBuilder;
|
import net.lamgc.cgj.bot.message.MessageSenderBuilder;
|
||||||
import net.lamgc.cgj.bot.message.MessageSource;
|
import net.lamgc.cgj.bot.message.MessageSource;
|
||||||
import net.lamgc.cgj.pixiv.PixivDownload;
|
import net.lamgc.cgj.pixiv.PixivDownload;
|
||||||
|
import net.lamgc.cgj.pixiv.PixivURL;
|
||||||
import net.lamgc.utils.base.runner.Argument;
|
import net.lamgc.utils.base.runner.Argument;
|
||||||
import net.lamgc.utils.base.runner.Command;
|
import net.lamgc.utils.base.runner.Command;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -104,6 +105,14 @@ public class BotAdminCommandProcess {
|
|||||||
return "操作已完成.";
|
return "操作已完成.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final static String RANKING_SETTING_TIME_MIN = "time.min";
|
||||||
|
private final static String RANKING_SETTING_TIME_FLOAT = "time.float";
|
||||||
|
private final static String RANKING_SETTING_RANKING_START = "ranking.start";
|
||||||
|
private final static String RANKING_SETTING_RANKING_END = "ranking.end";
|
||||||
|
private final static String RANKING_SETTING_RANKING_MODE = "ranking.mode";
|
||||||
|
private final static String RANKING_SETTING_RANKING_CONTENT_TYPE = "ranking.contentType";
|
||||||
|
private final static String RANKING_SETTING_PAGE_QUALITY = "page.quality";
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
public static String addPushGroup(
|
public static String addPushGroup(
|
||||||
@Argument(name = "$fromGroup") long fromGroup,
|
@Argument(name = "$fromGroup") long fromGroup,
|
||||||
@ -112,15 +121,21 @@ public class BotAdminCommandProcess {
|
|||||||
@Argument(name = "floatTime", force = false, defaultValue = "10800000") int floatTime,
|
@Argument(name = "floatTime", force = false, defaultValue = "10800000") int floatTime,
|
||||||
@Argument(name = "rankingStart", force = false, defaultValue = "1") int rankingStart,
|
@Argument(name = "rankingStart", force = false, defaultValue = "1") int rankingStart,
|
||||||
@Argument(name = "rankingStop", force = false, defaultValue = "150") int rankingStop,
|
@Argument(name = "rankingStop", force = false, defaultValue = "150") int rankingStop,
|
||||||
|
@Argument(name = "mode", force = false, defaultValue = "DAILY") String rankingMode,
|
||||||
|
@Argument(name = "type", force = false, defaultValue = "ILLUST") String rankingContentType,
|
||||||
@Argument(name = "original", force = false, defaultValue = "false") boolean original
|
@Argument(name = "original", force = false, defaultValue = "false") boolean original
|
||||||
) {
|
) {
|
||||||
long group = groupId <= 0 ? fromGroup : groupId;
|
long group = groupId <= 0 ? fromGroup : groupId;
|
||||||
JsonObject setting = new JsonObject();
|
JsonObject setting = new JsonObject();
|
||||||
setting.addProperty("time.min", minTime);
|
setting.addProperty(RANKING_SETTING_TIME_MIN, minTime);
|
||||||
setting.addProperty("time.float", floatTime);
|
setting.addProperty(RANKING_SETTING_TIME_FLOAT, floatTime);
|
||||||
setting.addProperty("ranking.start", rankingStart);
|
setting.addProperty(RANKING_SETTING_RANKING_START, rankingStart);
|
||||||
setting.addProperty("ranking.end", rankingStop);
|
setting.addProperty(RANKING_SETTING_RANKING_END, rankingStop);
|
||||||
setting.addProperty("pageQuality.original", original);
|
setting.addProperty(RANKING_SETTING_RANKING_MODE, rankingMode);
|
||||||
|
setting.addProperty(RANKING_SETTING_RANKING_CONTENT_TYPE, rankingContentType);
|
||||||
|
setting.addProperty(RANKING_SETTING_PAGE_QUALITY, original ?
|
||||||
|
PixivDownload.PageQuality.ORIGINAL.name() :
|
||||||
|
PixivDownload.PageQuality.REGULAR.name());
|
||||||
if(pushInfoMap.containsKey(group)) {
|
if(pushInfoMap.containsKey(group)) {
|
||||||
log.info("群 {} 已存在Timer, 删除Timer...", group);
|
log.info("群 {} 已存在Timer, 删除Timer...", group);
|
||||||
removePushGroup(fromGroup, groupId);
|
removePushGroup(fromGroup, groupId);
|
||||||
@ -173,14 +188,24 @@ public class BotAdminCommandProcess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载所有推送Timer
|
||||||
|
* @param flush 是否完全重载, 如为true则加载前会删除所有已加载的Timer
|
||||||
|
*/
|
||||||
public static void loadAllPushTimer(boolean flush) {
|
public static void loadAllPushTimer(boolean flush) {
|
||||||
if(flush) {
|
if(flush) {
|
||||||
RandomIntervalSendTimer.timerIdSet().forEach(id -> RandomIntervalSendTimer.getTimerById(id).destroy());
|
RandomIntervalSendTimer.timerIdSet().forEach(id -> RandomIntervalSendTimer.getTimerById(id).destroy());
|
||||||
|
} else {
|
||||||
|
cleanPushTimer();
|
||||||
}
|
}
|
||||||
cleanPushTimer();
|
|
||||||
pushInfoMap.forEach(BotAdminCommandProcess::addPushTimer);
|
pushInfoMap.forEach(BotAdminCommandProcess::addPushTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据设置增加Timer
|
||||||
|
* @param id 群组id
|
||||||
|
* @param setting jsonObject设置集
|
||||||
|
*/
|
||||||
private static void addPushTimer(long id, JsonObject setting) {
|
private static void addPushTimer(long id, JsonObject setting) {
|
||||||
try {
|
try {
|
||||||
RandomIntervalSendTimer.getTimerById(id);
|
RandomIntervalSendTimer.getTimerById(id);
|
||||||
@ -188,11 +213,56 @@ public class BotAdminCommandProcess {
|
|||||||
} catch(NoSuchElementException ignored) {
|
} catch(NoSuchElementException ignored) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int rankingStart = setting.has(RANKING_SETTING_RANKING_START) ? setting.get(RANKING_SETTING_RANKING_START).getAsInt() : 1;
|
||||||
|
int rankingEnd = setting.has(RANKING_SETTING_RANKING_END) ? setting.get(RANKING_SETTING_RANKING_END).getAsInt() : 150;
|
||||||
|
PixivURL.RankingMode rankingMode = PixivURL.RankingMode.MODE_DAILY;
|
||||||
|
PixivURL.RankingContentType rankingContentType = PixivURL.RankingContentType.TYPE_ILLUST;
|
||||||
|
PixivDownload.PageQuality pageQuality = PixivDownload.PageQuality.REGULAR;
|
||||||
|
|
||||||
|
if(rankingStart <= 0 || rankingStart > 500) {
|
||||||
|
log.warn("群组 [{}] - 无效的RankingStart设定值, 将重置为默认设定值(1): {}", id, rankingStart);
|
||||||
|
rankingStart = 1;
|
||||||
|
} else if(rankingEnd > 500 || rankingEnd <= 0) {
|
||||||
|
log.warn("群组 [{}] - 无效的RankingEnd设定值, 将重置为默认设定值(150): {}", id, rankingEnd);
|
||||||
|
rankingEnd = 150;
|
||||||
|
} else if(rankingStart > rankingEnd) {
|
||||||
|
log.warn("群组 [{}] - 无效的排行榜选取范围, 将重置为默认设定值(1 ~ 150): start={}, end={}", id, rankingStart, rankingEnd);
|
||||||
|
rankingStart = 1;
|
||||||
|
rankingEnd = 150;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(setting.has(RANKING_SETTING_RANKING_MODE)) {
|
||||||
|
String value = setting.get(RANKING_SETTING_RANKING_MODE).getAsString().trim().toUpperCase();
|
||||||
|
try {
|
||||||
|
rankingMode = PixivURL.RankingMode.valueOf(value.startsWith("MODE_") ? value : "MODE_" + value);
|
||||||
|
} catch(IllegalArgumentException e) {
|
||||||
|
log.warn("群组ID [{}] - 无效的RankingMode设定值, 将重置为默认值: {}", id, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(setting.has(RANKING_SETTING_RANKING_CONTENT_TYPE)) {
|
||||||
|
String value = setting.get(RANKING_SETTING_RANKING_CONTENT_TYPE).getAsString().trim().toUpperCase();
|
||||||
|
try {
|
||||||
|
rankingContentType = PixivURL.RankingContentType.valueOf(value.startsWith("TYPE_") ? value : "TYPE_" + value);
|
||||||
|
} catch(IllegalArgumentException e) {
|
||||||
|
log.warn("群组ID [{}] - 无效的RankingContentType设定值: {}", id, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(setting.has(RANKING_SETTING_PAGE_QUALITY)) {
|
||||||
|
String value = setting.get(RANKING_SETTING_PAGE_QUALITY).getAsString().trim().toUpperCase();
|
||||||
|
try {
|
||||||
|
pageQuality = PixivDownload.PageQuality.valueOf(value);
|
||||||
|
} catch(IllegalArgumentException e) {
|
||||||
|
log.warn("群组ID [{}] - 无效的PageQuality设定值: {}", id, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AutoSender sender = new RandomRankingArtworksSender(
|
AutoSender sender = new RandomRankingArtworksSender(
|
||||||
MessageSenderBuilder.getMessageSender(MessageSource.Group, id),
|
MessageSenderBuilder.getMessageSender(MessageSource.Group, id),
|
||||||
setting.get("ranking.start").getAsInt(),
|
rankingStart,
|
||||||
setting.get("ranking.end").getAsInt(),
|
rankingEnd,
|
||||||
setting.get("pageQuality.original").getAsBoolean() ? PixivDownload.PageQuality.ORIGINAL : PixivDownload.PageQuality.REGULAR
|
rankingMode, rankingContentType,
|
||||||
|
pageQuality
|
||||||
);
|
);
|
||||||
|
|
||||||
RandomIntervalSendTimer.createTimer(
|
RandomIntervalSendTimer.createTimer(
|
||||||
|
@ -21,6 +21,8 @@ public class RandomRankingArtworksSender extends AutoSender {
|
|||||||
private final Logger log;
|
private final Logger log;
|
||||||
private final int rankingStart;
|
private final int rankingStart;
|
||||||
private final int rankingStop;
|
private final int rankingStop;
|
||||||
|
private final PixivURL.RankingMode mode;
|
||||||
|
private final PixivURL.RankingContentType contentType;
|
||||||
private final PixivDownload.PageQuality quality;
|
private final PixivDownload.PageQuality quality;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -28,11 +30,15 @@ public class RandomRankingArtworksSender extends AutoSender {
|
|||||||
* @param messageSender 消息发送器
|
* @param messageSender 消息发送器
|
||||||
* @param rankingStart 排行榜开始范围(从1开始, 名次),如传入0或负数则为默认值,默认为1
|
* @param rankingStart 排行榜开始范围(从1开始, 名次),如传入0或负数则为默认值,默认为1
|
||||||
* @param rankingStop 排名榜结束范围(包括该名次),如传入0或负数则为默认值,默认为150
|
* @param rankingStop 排名榜结束范围(包括该名次),如传入0或负数则为默认值,默认为150
|
||||||
* @param quality 图片质量, 详见{@link net.lamgc.cgj.pixiv.PixivDownload.PageQuality}
|
* @param mode 排行榜模式
|
||||||
|
* @param contentType 排行榜内容类型
|
||||||
|
* @param quality 图片质量, 详见{@link PixivDownload.PageQuality}
|
||||||
* @throws IndexOutOfBoundsException 当 rankingStart > rankingStop时抛出
|
* @throws IndexOutOfBoundsException 当 rankingStart > rankingStop时抛出
|
||||||
*/
|
*/
|
||||||
public RandomRankingArtworksSender(MessageSender messageSender, int rankingStart, int rankingStop, PixivDownload.PageQuality quality) {
|
public RandomRankingArtworksSender(MessageSender messageSender, int rankingStart, int rankingStop, PixivURL.RankingMode mode, PixivURL.RankingContentType contentType, PixivDownload.PageQuality quality) {
|
||||||
super(messageSender);
|
super(messageSender);
|
||||||
|
this.mode = mode;
|
||||||
|
this.contentType = contentType;
|
||||||
log = LoggerFactory.getLogger("RecommendArtworksSender@" + Integer.toHexString(this.hashCode()));
|
log = LoggerFactory.getLogger("RecommendArtworksSender@" + Integer.toHexString(this.hashCode()));
|
||||||
this.rankingStart = rankingStart > 0 ? rankingStart : 1;
|
this.rankingStart = rankingStart > 0 ? rankingStart : 1;
|
||||||
this.rankingStop = rankingStop > 0 ? rankingStop : 150;
|
this.rankingStop = rankingStop > 0 ? rankingStop : 150;
|
||||||
@ -57,8 +63,8 @@ public class RandomRankingArtworksSender extends AutoSender {
|
|||||||
int selectRanking = rankingStart + new Random().nextInt(rankingStop - rankingStart + 1);
|
int selectRanking = rankingStart + new Random().nextInt(rankingStop - rankingStart + 1);
|
||||||
try {
|
try {
|
||||||
List<JsonObject> rankingList = BotCommandProcess.getRankingInfoByCache(
|
List<JsonObject> rankingList = BotCommandProcess.getRankingInfoByCache(
|
||||||
PixivURL.RankingContentType.TYPE_ILLUST,
|
contentType,
|
||||||
PixivURL.RankingMode.MODE_DAILY,
|
mode,
|
||||||
queryDate,
|
queryDate,
|
||||||
selectRanking,
|
selectRanking,
|
||||||
1, false);
|
1, false);
|
||||||
|
Loading…
Reference in New Issue
Block a user