权限系统和转发系统
1. 添加转发系统 2. 添加权限系统 3. 添加管理权限的命令 /perm
This commit is contained in:
parent
3df286ebbf
commit
1f6f293b58
@ -1,23 +1,46 @@
|
||||
package ren.taske.nativebot;
|
||||
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import cc.moecraft.icq.event.events.message.EventMessage;
|
||||
import ren.taske.nativebot.bot.chatting.Chatting;
|
||||
import ren.taske.nativebot.bot.chatting.MinecraftMessage;
|
||||
import ren.taske.nativebot.bot.chatting.TencentMessage;
|
||||
import ren.taske.nativebot.core.NativeBot;
|
||||
|
||||
public class MinecraftPlugin extends JavaPlugin {
|
||||
|
||||
protected final NativeBot core = new NativeBot(this);
|
||||
protected final NativeBot nativebot = new NativeBot(this);
|
||||
protected final Chatting chatting = new Chatting(this);
|
||||
|
||||
protected final MinecraftMessage mcevent = new MinecraftMessage(this);
|
||||
protected final TencentMessage tencentevent = new TencentMessage(this);
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
core.onEnable();
|
||||
nativebot.onEnable();
|
||||
nativebot.getBot().register(tencentevent);
|
||||
getServer().getPluginManager().registerEvents(mcevent, this);
|
||||
super.onEnable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
core.onDisable();
|
||||
nativebot.onDisable();
|
||||
super.onDisable();
|
||||
}
|
||||
|
||||
public NativeBot getBot() {
|
||||
return this.nativebot;
|
||||
}
|
||||
|
||||
public void onTencentMessage(EventMessage evt) {
|
||||
chatting.onTencentMessage(evt);
|
||||
}
|
||||
|
||||
public void onMinecraftMessage(AsyncPlayerChatEvent evt) {
|
||||
chatting.onMinecraftMessage(evt);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import cc.moecraft.icq.PicqBotX;
|
||||
import cc.moecraft.icq.PicqConfig;
|
||||
import cc.moecraft.icq.command.CommandManager;
|
||||
import cc.moecraft.icq.command.interfaces.IcqCommand;
|
||||
import cc.moecraft.icq.event.IcqListener;
|
||||
import cc.moecraft.icq.sender.IcqHttpApi;
|
||||
import cc.moecraft.logger.environments.ColorSupportLevel;
|
||||
import ren.taske.nativebot.commons.Config;
|
||||
@ -49,6 +50,15 @@ public class Bot extends Thread {
|
||||
register(cmds.toArray(new IcqCommand[0]));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add event listener for bot
|
||||
* @param listeners listeners
|
||||
*/
|
||||
public void register(IcqListener...listeners) {
|
||||
bot.getEventManager().registerListeners(listeners);
|
||||
}
|
||||
|
||||
/**
|
||||
* To start the bot. <br>
|
||||
* But wait! Did you {@code register} the commands?
|
||||
|
109
src/main/java/ren/taske/nativebot/bot/chatting/Chatting.java
Normal file
109
src/main/java/ren/taske/nativebot/bot/chatting/Chatting.java
Normal file
@ -0,0 +1,109 @@
|
||||
package ren.taske.nativebot.bot.chatting;
|
||||
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
|
||||
import cc.moecraft.icq.event.events.message.EventMessage;
|
||||
import cc.moecraft.icq.user.User;
|
||||
import cc.moecraft.icq.utils.CQUtils;
|
||||
import ren.taske.nativebot.MinecraftPlugin;
|
||||
import ren.taske.nativebot.commons.Config;
|
||||
import ren.taske.nativebot.core.NativeBot;
|
||||
import ren.taske.nativebot.core.profile.UserMinecraft;
|
||||
import ren.taske.nativebot.core.profile.UserTencent;
|
||||
import ren.taske.nativebot.util.MessageLib;
|
||||
|
||||
public class Chatting {
|
||||
|
||||
protected final MinecraftPlugin plugin;
|
||||
protected final NativeBot nativebot;
|
||||
|
||||
public Chatting(MinecraftPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
this.nativebot = plugin.getBot();
|
||||
}
|
||||
|
||||
public static final String NODE_CHATTING_TENCENT = "chatting.tencent";
|
||||
public static final String NODE_CHATTING_MINECRAFT = "chatting.minecraft";
|
||||
|
||||
/**
|
||||
* To handle messages from Tencent
|
||||
* @param evt PicqBotX message event
|
||||
*/
|
||||
public void onTencentMessage(EventMessage evt) {
|
||||
User user = evt.getSender();
|
||||
long userid = user.getId();
|
||||
UserTencent ut = UserTencent.of(userid);
|
||||
String message = evt.getMessage();
|
||||
String username = user.getInfo().getNickname();
|
||||
|
||||
if(!isPrefixed(message)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!ut.hasPermission(NODE_CHATTING_TENCENT, true)) {
|
||||
evt.respond(MessageLib.getUnauthorizedMessage(user));
|
||||
return;
|
||||
}
|
||||
|
||||
if(isPrefixed(message)) {
|
||||
|
||||
message = removePrefix(message);
|
||||
message = CQUtils.removeCqCode(message);
|
||||
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("<").append(username).append("> ").append("\u00a7r");
|
||||
sb.append(message);
|
||||
|
||||
plugin.getServer().broadcastMessage(sb.toString());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* To handle messages from Minecraft
|
||||
* @param evt Minecraft chatting event
|
||||
*/
|
||||
public void onMinecraftMessage(AsyncPlayerChatEvent evt) {
|
||||
|
||||
String message = evt.getMessage();
|
||||
String username = evt.getPlayer().getName();
|
||||
UserMinecraft um = UserMinecraft.of(username);
|
||||
|
||||
if(!isPrefixed(message)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!um.hasPermission(NODE_CHATTING_MINECRAFT, true)) {
|
||||
evt.getPlayer().sendMessage("You're Unauthorized!");
|
||||
return;
|
||||
}
|
||||
|
||||
if(isPrefixed(message)) {
|
||||
|
||||
message = removePrefix(message);
|
||||
|
||||
evt.setMessage(message);
|
||||
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("\uff3b").append(username).append("\uff3d ");
|
||||
sb.append(message);
|
||||
|
||||
plugin.getBot().getBot().sendGroupMessage(Config.group_id, sb.toString());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static boolean isPrefixed(String message) {
|
||||
for(String prefix : Config.chatting_prefixes) {
|
||||
if(message.startsWith(prefix)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static String removePrefix(String message) {
|
||||
return message.length() < 1 ? "" : message.substring(1);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package ren.taske.nativebot.bot.chatting;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
|
||||
import ren.taske.nativebot.MinecraftPlugin;
|
||||
|
||||
public class MinecraftMessage implements Listener {
|
||||
|
||||
protected final MinecraftPlugin plugin;
|
||||
|
||||
public MinecraftMessage(MinecraftPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void message(AsyncPlayerChatEvent evt) {
|
||||
plugin.onMinecraftMessage(evt);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package ren.taske.nativebot.bot.chatting;
|
||||
|
||||
import cc.moecraft.icq.event.EventHandler;
|
||||
import cc.moecraft.icq.event.IcqListener;
|
||||
import cc.moecraft.icq.event.events.message.EventMessage;
|
||||
import ren.taske.nativebot.MinecraftPlugin;
|
||||
|
||||
public class TencentMessage extends IcqListener {
|
||||
|
||||
protected final MinecraftPlugin plugin;
|
||||
|
||||
public TencentMessage(MinecraftPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void message(EventMessage evt) {
|
||||
plugin.onTencentMessage(evt);
|
||||
}
|
||||
|
||||
}
|
@ -18,7 +18,9 @@ public class CommandAbout extends CommandBase {
|
||||
"(command with * requires OP_PERMISSION_NODE)",
|
||||
"/about[/bot|/help] - show this notice",
|
||||
"/op - query if you're operator",
|
||||
"/op* [userid] - set user as operator");
|
||||
"/op* [uid] - set user as operator",
|
||||
"/perm* [uid] [node] - get the value of the node",
|
||||
"/perm* [uid] [node] [true/false] - set the value of the node");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,57 @@
|
||||
package ren.taske.nativebot.bot.command;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import cc.moecraft.icq.event.events.message.EventMessage;
|
||||
import cc.moecraft.icq.user.User;
|
||||
import ren.taske.data.util.ParseUtil;
|
||||
import ren.taske.nativebot.commons.Reference;
|
||||
import ren.taske.nativebot.core.profile.UserTencent;
|
||||
import ren.taske.nativebot.util.MessageUtils;
|
||||
|
||||
public class CommandPermission extends CommandBase {
|
||||
|
||||
public CommandPermission() {
|
||||
super("perm", Reference.NODE_OP, "permission");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String execute(EventMessage evt, User user, long userid, String command, ArrayList<String> args) {
|
||||
String message = "";
|
||||
if(args.size() < 2) {
|
||||
message = "Wrong Arguments!";
|
||||
}
|
||||
if(args.size() >= 2) {
|
||||
String username = args.get(0);
|
||||
String nodename = args.get(1);
|
||||
|
||||
Long uid = ParseUtil.parseLong(username);
|
||||
|
||||
if(uid != null) {
|
||||
|
||||
UserTencent u = UserTencent.of(userid);
|
||||
|
||||
if(args.size() == 2) {
|
||||
message = nodename + " = " + u.hasPermission(nodename);
|
||||
}
|
||||
|
||||
if(args.size() > 2) {
|
||||
boolean value = ParseUtil.parseBoolean(args.get(2));
|
||||
u.setPermission(nodename, value);
|
||||
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append(nodename).append("(").append(uid).append(")");
|
||||
sb.append(" set to ").append(value);
|
||||
|
||||
message = sb.toString();
|
||||
}
|
||||
|
||||
} else {
|
||||
message = "NumberFormatException!";
|
||||
}
|
||||
|
||||
}
|
||||
return MessageUtils.retAt(userid, message);
|
||||
}
|
||||
|
||||
}
|
@ -17,6 +17,10 @@ public class Config {
|
||||
public static String url_out;
|
||||
public static String[] prefixes;
|
||||
|
||||
// The Chatting Settings
|
||||
public static long group_id;
|
||||
public static String[] chatting_prefixes;
|
||||
|
||||
public static void refresh() {
|
||||
|
||||
port_in = cfg.getInt("in", "constructor", 25560, 0, 65535, "The port for receiving messages");
|
||||
@ -24,6 +28,9 @@ public class Config {
|
||||
url_out = cfg.getString("url", "constructor", "127.0.0.1", "The url for sending message to HttpApi");
|
||||
prefixes = cfg.getStringList("prefixes", "constructor", new String[] {"/"}, "The prefixes of commands in Tencent");
|
||||
|
||||
group_id = cfg.get("chatting", "group", "139971220").getLong(0L);
|
||||
chatting_prefixes = cfg.getStringList("prefixes", "chatting", new String[] {"!", "\uff01"}, "The prefixes of chatting");
|
||||
|
||||
cfg.save();
|
||||
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import cc.moecraft.icq.command.interfaces.IcqCommand;
|
||||
import ren.taske.nativebot.bot.Bot;
|
||||
import ren.taske.nativebot.bot.command.CommandAbout;
|
||||
import ren.taske.nativebot.bot.command.CommandOperator;
|
||||
import ren.taske.nativebot.bot.command.CommandPermission;
|
||||
import ren.taske.nativebot.util.ClassUtils;
|
||||
|
||||
public class NativeBot {
|
||||
@ -17,13 +18,13 @@ public class NativeBot {
|
||||
@SuppressWarnings("unchecked")
|
||||
private static final Class<IcqCommand>[] COMMAND_CLASSES = new Class[] {
|
||||
CommandAbout.class,
|
||||
CommandOperator.class
|
||||
CommandOperator.class,
|
||||
CommandPermission.class
|
||||
};
|
||||
|
||||
protected final JavaPlugin plugin;
|
||||
protected final Bot bot;
|
||||
|
||||
|
||||
public NativeBot(JavaPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
this.bot = new Bot();
|
||||
@ -36,6 +37,10 @@ public class NativeBot {
|
||||
return logger;
|
||||
}
|
||||
|
||||
public Bot getBot() {
|
||||
return this.bot;
|
||||
}
|
||||
|
||||
public void onEnable() {
|
||||
bot.register(ClassUtils.instantiate(COMMAND_CLASSES));
|
||||
bot.start();
|
||||
|
@ -36,7 +36,24 @@ public class UserMinecraft extends User {
|
||||
|
||||
@Override
|
||||
public void reload() {
|
||||
|
||||
data.save();
|
||||
}
|
||||
|
||||
public boolean hasPermission(String node) {
|
||||
return hasPermission(node, false);
|
||||
}
|
||||
|
||||
public boolean hasPermission(String node, boolean defaultVal) {
|
||||
if(node != null) {
|
||||
data.setDefault(node, defaultVal);
|
||||
data.save();
|
||||
}
|
||||
return data.getBoolean(node, false);
|
||||
}
|
||||
|
||||
public void setPermission(String node, boolean val) {
|
||||
data.setBoolean(node, val);
|
||||
data.save();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,8 +40,12 @@ public class UserTencent extends User {
|
||||
}
|
||||
|
||||
public boolean hasPermission(String node) {
|
||||
return hasPermission(node, false);
|
||||
}
|
||||
|
||||
public boolean hasPermission(String node, boolean defaultVal) {
|
||||
if(node != null) {
|
||||
data.setDefault(node, false);
|
||||
data.setDefault(node, defaultVal);
|
||||
data.save();
|
||||
}
|
||||
return data.getBoolean(node, false);
|
||||
|
Loading…
Reference in New Issue
Block a user