From c7f8a928d570fd0683640491f2d4a4a4b55b044b Mon Sep 17 00:00:00 2001 From: WhitrayHB <2039851887@qq.com> Date: Sat, 10 Sep 2022 21:45:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Cooldown=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复一个bug --- build.gradle.kts | 2 +- .../randomanimal/RandomAnimalMain.java | 4 +- .../randomanimal/command/RandomCat.java | 11 +++++ .../randomanimal/command/RandomDog.java | 11 +++++ .../randomanimal/command/RandomFox.java | 11 +++++ .../randomanimal/config/PluginConfig.kt | 12 +++++ .../whitrayhb/randomanimal/util/Cooler.java | 46 +++++++++++++++++++ 7 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 src/main/java/cn/whitrayhb/randomanimal/config/PluginConfig.kt create mode 100644 src/main/java/cn/whitrayhb/randomanimal/util/Cooler.java diff --git a/build.gradle.kts b/build.gradle.kts index c610fb7..dd7dcc1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } group = "cn.whitrayhb" -version = "0.1.3" +version = "0.1.4" repositories { maven("https://maven.aliyun.com/repository/public") // 阿里云国内代理仓库 diff --git a/src/main/java/cn/whitrayhb/randomanimal/RandomAnimalMain.java b/src/main/java/cn/whitrayhb/randomanimal/RandomAnimalMain.java index d966696..7aef910 100644 --- a/src/main/java/cn/whitrayhb/randomanimal/RandomAnimalMain.java +++ b/src/main/java/cn/whitrayhb/randomanimal/RandomAnimalMain.java @@ -3,6 +3,7 @@ import cn.whitrayhb.randomanimal.command.RandomCat; import cn.whitrayhb.randomanimal.command.RandomDog; import cn.whitrayhb.randomanimal.command.RandomFox; +import cn.whitrayhb.randomanimal.config.PluginConfig; import net.mamoe.mirai.console.command.CommandManager; import net.mamoe.mirai.console.plugin.jvm.JavaPlugin; import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescriptionBuilder; @@ -10,7 +11,7 @@ public final class RandomAnimalMain extends JavaPlugin { public static final RandomAnimalMain INSTANCE = new RandomAnimalMain(); private RandomAnimalMain() { - super(new JvmPluginDescriptionBuilder("cn.whitrayhb.randomanimal", "0.1.3") + super(new JvmPluginDescriptionBuilder("cn.whitrayhb.randomanimal", "0.1.4") .info("咕咕咕") .name("随机动物图插件") .author("WhitrayHB") @@ -23,5 +24,6 @@ public void onEnable() { CommandManager.INSTANCE.registerCommand(RandomCat.INSTANCE,true); CommandManager.INSTANCE.registerCommand(RandomDog.INSTANCE,true); CommandManager.INSTANCE.registerCommand(RandomFox.INSTANCE,true); + reloadPluginConfig(PluginConfig.RandomAnimal.INSTANCE); } } diff --git a/src/main/java/cn/whitrayhb/randomanimal/command/RandomCat.java b/src/main/java/cn/whitrayhb/randomanimal/command/RandomCat.java index 4dbd0cb..b134f9d 100644 --- a/src/main/java/cn/whitrayhb/randomanimal/command/RandomCat.java +++ b/src/main/java/cn/whitrayhb/randomanimal/command/RandomCat.java @@ -1,9 +1,12 @@ package cn.whitrayhb.randomanimal.command; import cn.whitrayhb.randomanimal.RandomAnimalMain; +import cn.whitrayhb.randomanimal.config.PluginConfig; import cn.whitrayhb.randomanimal.data.CatData; import cn.whitrayhb.randomanimal.data.FetchPicture; +import cn.whitrayhb.randomanimal.util.Cooler; import net.mamoe.mirai.console.command.CommandSender; +import net.mamoe.mirai.console.command.ConsoleCommandSender; import net.mamoe.mirai.console.command.java.JRawCommand; import net.mamoe.mirai.message.data.*; import net.mamoe.mirai.utils.ExternalResource; @@ -11,6 +14,7 @@ import java.io.File; import java.io.IOException; +import java.util.Objects; public class RandomCat extends JRawCommand { @@ -25,6 +29,13 @@ private RandomCat() { @Override public void onCommand(@NotNull CommandSender sender, @NotNull MessageChain args) { + if(!(sender instanceof ConsoleCommandSender)){ + if (Cooler.isLocked(Objects.requireNonNull(sender.getUser()).getId())) { + sender.sendMessage("操作太快了,请稍后再试"); + return; + } + Cooler.lock(sender.getUser().getId(), PluginConfig.RandomAnimal.INSTANCE.getCooldown()); + } sender.sendMessage("稍等……猫猫正在跑步前进!"); /*图片保存路径*/ String savePath = "./data/cn.whitrayhb.randomanimal/cache/cat/"; diff --git a/src/main/java/cn/whitrayhb/randomanimal/command/RandomDog.java b/src/main/java/cn/whitrayhb/randomanimal/command/RandomDog.java index 9d9da1f..a2f4d95 100644 --- a/src/main/java/cn/whitrayhb/randomanimal/command/RandomDog.java +++ b/src/main/java/cn/whitrayhb/randomanimal/command/RandomDog.java @@ -1,10 +1,13 @@ package cn.whitrayhb.randomanimal.command; import cn.whitrayhb.randomanimal.RandomAnimalMain; +import cn.whitrayhb.randomanimal.config.PluginConfig; import cn.whitrayhb.randomanimal.data.CatData; import cn.whitrayhb.randomanimal.data.DogData; import cn.whitrayhb.randomanimal.data.FetchPicture; +import cn.whitrayhb.randomanimal.util.Cooler; import net.mamoe.mirai.console.command.CommandSender; +import net.mamoe.mirai.console.command.ConsoleCommandSender; import net.mamoe.mirai.console.command.java.JRawCommand; import net.mamoe.mirai.message.data.Image; import net.mamoe.mirai.message.data.MessageChain; @@ -13,6 +16,7 @@ import java.io.File; import java.io.IOException; +import java.util.Objects; public class RandomDog extends JRawCommand { @@ -27,6 +31,13 @@ private RandomDog() { @Override public void onCommand(@NotNull CommandSender sender, @NotNull MessageChain args) { + if(!(sender instanceof ConsoleCommandSender)){ + if (Cooler.isLocked(Objects.requireNonNull(sender.getUser()).getId())) { + sender.sendMessage("操作太快了,请稍后再试"); + return; + } + Cooler.lock(sender.getUser().getId(), PluginConfig.RandomAnimal.INSTANCE.getCooldown()); + } sender.sendMessage("稍等……狗狗正在跑步前进!"); String savePath; String url; diff --git a/src/main/java/cn/whitrayhb/randomanimal/command/RandomFox.java b/src/main/java/cn/whitrayhb/randomanimal/command/RandomFox.java index 0dcdff8..8465ded 100644 --- a/src/main/java/cn/whitrayhb/randomanimal/command/RandomFox.java +++ b/src/main/java/cn/whitrayhb/randomanimal/command/RandomFox.java @@ -1,10 +1,13 @@ package cn.whitrayhb.randomanimal.command; import cn.whitrayhb.randomanimal.RandomAnimalMain; +import cn.whitrayhb.randomanimal.config.PluginConfig; import cn.whitrayhb.randomanimal.data.CatData; import cn.whitrayhb.randomanimal.data.FetchPicture; import cn.whitrayhb.randomanimal.data.FoxData; +import cn.whitrayhb.randomanimal.util.Cooler; import net.mamoe.mirai.console.command.CommandSender; +import net.mamoe.mirai.console.command.ConsoleCommandSender; import net.mamoe.mirai.console.command.java.JRawCommand; import net.mamoe.mirai.message.data.*; import net.mamoe.mirai.utils.ExternalResource; @@ -12,6 +15,7 @@ import java.io.File; import java.io.IOException; +import java.util.Objects; public class RandomFox extends JRawCommand { @@ -26,6 +30,13 @@ private RandomFox() { @Override public void onCommand(@NotNull CommandSender sender, @NotNull MessageChain args) { + if(!(sender instanceof ConsoleCommandSender)){ + if (Cooler.isLocked(Objects.requireNonNull(sender.getUser()).getId())) { + sender.sendMessage("操作太快了,请稍后再试"); + return; + } + Cooler.lock(sender.getUser().getId(), PluginConfig.RandomAnimal.INSTANCE.getCooldown()); + } sender.sendMessage("稍等……狐狐正在跑步前进!"); String savePath = "./data/cn.whitrayhb.randomanimal/cache/fox"; //Powered by AkibaSo/SamukawaUI diff --git a/src/main/java/cn/whitrayhb/randomanimal/config/PluginConfig.kt b/src/main/java/cn/whitrayhb/randomanimal/config/PluginConfig.kt new file mode 100644 index 0000000..f9d7957 --- /dev/null +++ b/src/main/java/cn/whitrayhb/randomanimal/config/PluginConfig.kt @@ -0,0 +1,12 @@ +package cn.whitrayhb.randomanimal.config + +import net.mamoe.mirai.console.data.AutoSavePluginConfig +import net.mamoe.mirai.console.data.ValueDescription +import net.mamoe.mirai.console.data.value + +class PluginConfig { + object RandomAnimal : AutoSavePluginConfig("RandomAnimal") { + @ValueDescription("CD时长,设为-1则禁用") + val cooldown by value(15) + } +} \ No newline at end of file diff --git a/src/main/java/cn/whitrayhb/randomanimal/util/Cooler.java b/src/main/java/cn/whitrayhb/randomanimal/util/Cooler.java new file mode 100644 index 0000000..615f856 --- /dev/null +++ b/src/main/java/cn/whitrayhb/randomanimal/util/Cooler.java @@ -0,0 +1,46 @@ +package cn.whitrayhb.randomanimal.util; + +import java.util.concurrent.ConcurrentHashMap; + +public class Cooler { + private static final ConcurrentHashSet set = new ConcurrentHashSet(); + public static void lock(long id,int second){ + if(second<=0) return; + set.add(id); + Thread unlockThread = new Thread(() ->{ + try { + Thread.sleep(second* 1000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + unlock(id); + }); + unlockThread.start(); + } + public static void unlock(long id){ + set.remove(id); + } + public static boolean isLocked(long id){ + return set.contains(id); + } +} + +class ConcurrentHashSet{ + private final ConcurrentHashMap map; + ConcurrentHashSet(){ + map = new ConcurrentHashMap(); + } + public void add(T value){ + map.put(value,1); + } + public void remove(T value){ + map.remove(value,1); + } + public Boolean contains(T value){ + return map.containsKey(value); + } + public String mapReturn(){ + return String.valueOf(map); + } +} +