Browse Source

add jsource

jiahua.liu 6 năm trước cách đây
mục cha
commit
c0c4d3dcb7
2 tập tin đã thay đổi với 179 bổ sung0 xóa
  1. 3 0
      PluginDocs/java/MyFirstPlugin.MD
  2. 176 0
      PluginDocs/java/source.java

+ 3 - 0
PluginDocs/java/MyFirstPlugin.MD

@@ -0,0 +1,3 @@
+Java的插件教程
+
+你可以下载source.java和MyFirstPluginJava.pdf 一起阅读

+ 176 - 0
PluginDocs/java/source.java

@@ -0,0 +1,176 @@
+package net.mamoe.n;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import net.mamoe.mirai.console.command.*;
+import net.mamoe.mirai.console.plugins.Config;
+import net.mamoe.mirai.console.plugins.ConfigSection;
+import net.mamoe.mirai.console.plugins.ConfigSectionFactory;
+import net.mamoe.mirai.console.plugins.PluginBase;
+import net.mamoe.mirai.console.utils.Utils;
+import net.mamoe.mirai.message.GroupMessage;
+import org.jetbrains.annotations.NotNull;
+import org.jsoup.Jsoup;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class PingMyMCServerMain extends PluginBase {
+
+    private String defaultServerName;
+    private ConfigSection serverMap;
+    private Config setting;
+    private String API;
+    private String responseTemplate;
+
+    public void onLoad(){
+        super.onLoad();
+
+        this.setting = this.loadConfig("setting.yml");
+
+        this.setting.setIfAbsent("API","https://api-mping.loliboy.com/ping/{address}/{port}");
+        this.setting.setIfAbsent("ServerList", ConfigSectionFactory.create());
+        this.setting.setIfAbsent("DefaultServerName","");
+        this.setting.setIfAbsent("ResponseTemplate","Ping {serverName}: \nGame: {game}, {version}\nName: {fullName}\nPlayer: {currentPlayers}/{maxPlayers}\nConnected: {connected}\nIP: {address}:{port}");
+
+
+        this.API = this.setting.getString("API");
+        this.defaultServerName = this.setting.getString("DefaultServerName");
+        this.serverMap = this.setting.getConfigSection("ServerList");
+        this.responseTemplate = this.setting.getString("ResponseTemplate");
+    }
+
+    @Override
+    public void onDisable() {
+        super.onDisable();
+        this.setting.set("ServerList",serverMap);
+        this.setting.set("DefaultServerName",defaultServerName);
+        this.setting.save();
+    }
+
+    public void onEnable(){
+        this.getEventListener().subscribeAlways(GroupMessage.class, (GroupMessage event) -> {
+
+            String messageInString = event.getMessage().toString();
+
+            if(!messageInString.contains("ping ")) {
+                return;
+            }
+
+            String serverName = messageInString.replace("ping ", "").toLowerCase().trim();
+
+            if(!this.serverMap.containsKey(serverName)) {
+                serverName = this.defaultServerName;
+            }
+
+            if(!this.serverMap.containsKey(serverName)){
+                event.getSubject().sendMessage("Bot管理员没有设置任何可ping的服务器, 请使用/mcserver 来增加");
+                return;
+            }
+
+            ConfigSection serverInfo = this.serverMap.getConfigSection(serverName);
+
+            final String serverName_ = serverName;
+
+            getScheduler().async(() -> {
+                event.getSubject().sendMessage("正在获取中..");
+                try {
+                    String response = Utils.tryNTimes(2, () ->
+                            Jsoup.connect(API
+                                    .replace("{address}", serverInfo.getString("address"))
+                                    .replace("{port}", serverInfo.getString("port"))
+                            ).ignoreContentType(true).timeout(8000).execute().body()
+                    );
+                    JsonObject resObj = JsonParser.parseString(response).getAsJsonObject();
+                    JsonObject addressObj = resObj.get("rinfo").getAsJsonObject();
+                    event.getSubject().sendMessage(this.responseTemplate
+                            .replace("{connected}",resObj.get("connected").getAsString())
+                            .replace("{currentPlayers}",resObj.get("currentPlayers").getAsString())
+                            .replace("{maxPlayers}",resObj.get("maxPlayers").getAsString())
+                            .replace("{serverName}",serverName_)
+                            .replace("{fullName}",resObj.get("cleanName").getAsString())
+                            .replace("{game}",resObj.get("game").getAsString())
+                            .replace("{version}",resObj.get("version").getAsString())
+                            .replace("{address}",addressObj.get("address").getAsString())
+                            .replace("{port}",addressObj.get("port").getAsString())
+                    );
+                } catch (Exception e) {
+                    event.getSubject().sendMessage("获取失败.." + e.getMessage());
+                    e.printStackTrace();
+                }
+            });
+
+        });
+
+        JCommandManager.getInstance().register(this, new BlockingCommand(
+                "mcserver", new ArrayList<>(),"管理可以ping的MC服务器","/mcserver add/remove"
+        ) {
+            @Override
+            public boolean onCommandBlocking(@NotNull CommandSender commandSender, @NotNull List<String> list) {
+                if(list.size() < 1){
+                    return false;
+                }
+                switch (list.get(0)){
+                    case "add":
+                        if(list.size() < 4){
+                            commandSender.sendMessageBlocking("/mcserver add 服务器名字 IP 端口");
+                            return true;
+                        }
+                        String serverName = list.get(1);
+
+                        String IP = list.get(2);
+
+                        int port = -1;
+                        try {
+                            port = Integer.parseInt(list.get(3));
+                        }catch (Exception e){
+                            commandSender.sendMessageBlocking("无法识别端口号");
+                            return true;
+                        }
+
+                        if(port < 0 || port > 65535){
+                            commandSender.sendMessageBlocking("无法识别端口号[0-65535]");
+                            return true;
+                        }
+                        if(IP.contains(":")){
+                            commandSender.sendMessageBlocking("IP中不应包含端口");
+                            return true;
+                        }
+
+                        ConfigSection data = ConfigSectionFactory.create();
+
+                        data.set("address",IP);
+                        data.set("port",port);
+
+                        if(serverMap.size() == 0){
+                            defaultServerName = serverName;
+                        }
+
+                        serverMap.put(serverName.toLowerCase(),data);
+                        commandSender.sendMessageBlocking("设置成功, 发送ping " + serverName + " 即可");
+
+                        break;
+                    case "remove":
+                        if(list.size() < 2){
+                            commandSender.sendMessageBlocking("/mcserver remove 服务器名字");
+                            return true;
+                        }
+                        String serverNameToRemove = list.get(1).toLowerCase();
+                        if(serverMap.containsKey(serverNameToRemove)){
+                            serverMap.remove(serverNameToRemove);
+                            commandSender.sendMessageBlocking("移除成功");
+                        }else{
+                            commandSender.sendMessageBlocking("没有找到" + list.get(1) + "的数据");
+                        }
+                        break;
+                    default:
+                        return false;
+                }
+                return true;
+            }
+        });
+
+        this.getLogger().info("PingMyMCServer Enabled");
+    }
+
+}