From 683a38bc17dc062da96edab7b4a904170285e0cc Mon Sep 17 00:00:00 2001 From: LamGC Date: Mon, 8 Jun 2020 09:24:17 +0800 Subject: [PATCH] =?UTF-8?q?[Add]=20BotGlobal=20BotGlobal=E5=9C=A8=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E6=97=B6=E5=B0=86=E6=A3=80=E6=9F=A5Redis?= =?UTF-8?q?=E8=BF=9E=E9=80=9A=E6=80=A7;=20[Change]=20RandomRankingArtworks?= =?UTF-8?q?Sender=20=E6=94=AF=E6=8C=81=E5=A4=96=E9=83=A8=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?groupId,=20=E4=BB=A5=E4=BD=BF=E7=94=A8=E7=BE=A4=E7=BB=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE;=20[Change]=20BotCommandProcess,=20BotAdminC?= =?UTF-8?q?ommandProcess=20=E9=80=82=E9=85=8DRandomRankingArtworksSender?= =?UTF-8?q?=E6=9B=B4=E6=94=B9;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lamgc/cgj/bot/BotAdminCommandProcess.java | 1 + .../net/lamgc/cgj/bot/BotCommandProcess.java | 33 ++++++++++++++---- .../cgj/bot/RandomRankingArtworksSender.java | 34 +++++++++++++++++-- .../net/lamgc/cgj/bot/boot/BotGlobal.java | 15 ++++---- 4 files changed, 67 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/lamgc/cgj/bot/BotAdminCommandProcess.java b/src/main/java/net/lamgc/cgj/bot/BotAdminCommandProcess.java index a06d208..034e855 100644 --- a/src/main/java/net/lamgc/cgj/bot/BotAdminCommandProcess.java +++ b/src/main/java/net/lamgc/cgj/bot/BotAdminCommandProcess.java @@ -271,6 +271,7 @@ public class BotAdminCommandProcess { AutoSender sender = new RandomRankingArtworksSender( MessageSenderBuilder.getMessageSender(MessageSource.Group, id), + id, rankingStart, rankingEnd, rankingMode, rankingContentType, diff --git a/src/main/java/net/lamgc/cgj/bot/BotCommandProcess.java b/src/main/java/net/lamgc/cgj/bot/BotCommandProcess.java index 9f9981a..5c87633 100644 --- a/src/main/java/net/lamgc/cgj/bot/BotCommandProcess.java +++ b/src/main/java/net/lamgc/cgj/bot/BotCommandProcess.java @@ -14,8 +14,6 @@ import net.lamgc.cgj.pixiv.PixivDownload; import net.lamgc.cgj.pixiv.PixivDownload.PageQuality; import net.lamgc.cgj.pixiv.PixivSearchBuilder; import net.lamgc.cgj.pixiv.PixivURL; -import net.lamgc.cgj.pixiv.PixivURL.RankingContentType; -import net.lamgc.cgj.pixiv.PixivURL.RankingMode; import net.lamgc.utils.base.runner.Argument; import net.lamgc.utils.base.runner.Command; import org.slf4j.Logger; @@ -257,13 +255,34 @@ public class BotCommandProcess { * 随机获取一副作品 */ @Command(commandName = "random") - public static String randomImage() { + public static String randomImage( + @Argument(name = "$fromGroup") long fromGroup, + @Argument(force = false, name = "mode", defaultValue = "DAILY") String contentMode, + @Argument(force = false, name = "type", defaultValue = "ILLUST") String contentType) { + PixivURL.RankingMode mode; + try { + String rankingModeValue = contentMode.toUpperCase(); + mode = PixivURL.RankingMode.valueOf(rankingModeValue.startsWith("MODE_") ? + rankingModeValue : "MODE_" + rankingModeValue); + } catch (IllegalArgumentException e) { + log.warn("无效的RankingMode值: {}", contentMode); + return "参数无效, 请查看帮助信息"; + } + + PixivURL.RankingContentType type; + try { + String contentTypeValue = contentType.toUpperCase(); + type = PixivURL.RankingContentType.valueOf( + contentTypeValue.startsWith("TYPE_") ? contentTypeValue : "TYPE_" + contentTypeValue); + } catch (IllegalArgumentException e) { + log.warn("无效的RankingContentType值: {}", contentType); + return "参数无效, 请查看帮助信息"; + } + BufferMessageEvent event = new BufferMessageEvent(); RandomRankingArtworksSender artworksSender = - new RandomRankingArtworksSender(event, 1, 200, - RankingMode.MODE_MALE, - RankingContentType.TYPE_ALL, - PageQuality.ORIGINAL); + new RandomRankingArtworksSender(event, fromGroup, 1, 200, mode, type, + PageQuality.ORIGINAL); artworksSender.send(); return event.getBufferMessage(); } diff --git a/src/main/java/net/lamgc/cgj/bot/RandomRankingArtworksSender.java b/src/main/java/net/lamgc/cgj/bot/RandomRankingArtworksSender.java index 15ca6a8..e6fbe4c 100644 --- a/src/main/java/net/lamgc/cgj/bot/RandomRankingArtworksSender.java +++ b/src/main/java/net/lamgc/cgj/bot/RandomRankingArtworksSender.java @@ -19,6 +19,7 @@ import java.util.Random; public class RandomRankingArtworksSender extends AutoSender { private final Logger log; + private final long groupId; private final int rankingStart; private final int rankingStop; private final PixivURL.RankingMode mode; @@ -35,8 +36,37 @@ public class RandomRankingArtworksSender extends AutoSender { * @param quality 图片质量, 详见{@link PixivDownload.PageQuality} * @throws IndexOutOfBoundsException 当 rankingStart > rankingStop时抛出 */ - public RandomRankingArtworksSender(MessageSender messageSender, int rankingStart, int rankingStop, PixivURL.RankingMode mode, PixivURL.RankingContentType contentType, PixivDownload.PageQuality quality) { + public RandomRankingArtworksSender( + MessageSender messageSender, + int rankingStart, + int rankingStop, + PixivURL.RankingMode mode, + PixivURL.RankingContentType contentType, + PixivDownload.PageQuality quality) { + this(messageSender, 0, rankingStart, rankingStop, mode, contentType, quality); + } + + /** + * 构造一个推荐作品发送器 + * @param messageSender 消息发送器 + * @param groupId 群组Id, 如果发送目标为群组, 则可设置群组Id, 以使用群组配置. + * @param rankingStart 排行榜开始范围(从1开始, 名次),如传入0或负数则为默认值,默认为1 + * @param rankingStop 排名榜结束范围(包括该名次),如传入0或负数则为默认值,默认为150 + * @param mode 排行榜模式 + * @param contentType 排行榜内容类型 + * @param quality 图片质量, 详见{@link PixivDownload.PageQuality} + * @throws IndexOutOfBoundsException 当 rankingStart > rankingStop时抛出 + */ + public RandomRankingArtworksSender( + MessageSender messageSender, + long groupId, + int rankingStart, + int rankingStop, + PixivURL.RankingMode mode, + PixivURL.RankingContentType contentType, + PixivDownload.PageQuality quality) { super(messageSender); + this.groupId = groupId; this.mode = mode; this.contentType = contentType; log = LoggerFactory.getLogger(this.toString()); @@ -78,7 +108,7 @@ public class RandomRankingArtworksSender extends AutoSender { JsonObject rankingInfo = rankingList.get(0); int illustId = rankingInfo.get("illust_id").getAsInt(); if(BotCommandProcess.isNoSafe(illustId, - SettingProperties.getProperties(SettingProperties.GLOBAL), false)) { + SettingProperties.getProperties(groupId), false)) { log.warn("作品为r18作品, 取消本次发送."); return; } else if(BotCommandProcess.isReported(illustId)) { diff --git a/src/main/java/net/lamgc/cgj/bot/boot/BotGlobal.java b/src/main/java/net/lamgc/cgj/bot/boot/BotGlobal.java index 9f7f823..890e57e 100644 --- a/src/main/java/net/lamgc/cgj/bot/boot/BotGlobal.java +++ b/src/main/java/net/lamgc/cgj/bot/boot/BotGlobal.java @@ -8,7 +8,9 @@ import org.apache.http.HttpHost; import org.apache.http.client.CookieStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; +import redis.clients.jedis.exceptions.JedisConnectionException; import java.io.File; import java.io.IOException; @@ -56,6 +58,12 @@ public final class BotGlobal { this.redisServer = new JedisPool( getRedisUri().getHost(), getRedisUri().getPort() == -1 ? 6379 : getRedisUri().getPort()); + try (Jedis jedis = this.redisServer.getResource()) { + log.warn("Redis连接状态(Ping): {}", jedis.ping().equalsIgnoreCase("pong")); + } catch(JedisConnectionException e) { + log.warn("Redis连接失败, 将会影响到后续功能运行.", e); + } + String dataStoreDirPath = System.getProperty("cgj.botDataDir"); this.dataStoreDir = new File((!dataStoreDirPath.endsWith("/") || !dataStoreDirPath.endsWith("\\")) ? dataStoreDirPath + System.getProperty("file.separator") : dataStoreDirPath); @@ -95,13 +103,6 @@ public final class BotGlobal { return proxy; } - public CookieStore getCookieStore() { - if(pixivDownload == null) { - throw new IllegalStateException("CookieStore needs to be set before PixivDownload can be obtained"); - } - return cookieStore; - } - public void setCookieStore(CookieStore cookieStore) { if(this.cookieStore != null) { throw new IllegalStateException("CookieStore set");