Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def eat(string src) {
- auto r := range(src);
- auto ret = "";
- while (!r.empty() && r.front() == ' ') {
- r.pop_front();
- }
- while (!r.empty() && r.front() != ' ') {
- ret += r.front().to_string();
- r.pop_front();
- }
- if (!r.empty()) { r.pop_front(); }
- return [ret, r.join("")];
- }
- def eat(string src, int n) {
- auto r := range(src);
- auto arr = [];
- auto temp = "";
- while (!r.empty() && r.front() == ' ') {
- r.pop_front();
- }
- while (!r.empty() && arr.size() < n) {
- if (r.front() == ' ') {
- arr.push_back(temp);
- temp = "";
- r.pop_front();
- while (!r.empty() && r.front() == ' ') {
- r.pop_front();
- }
- continue;
- }
- temp += r.front().to_string();
- r.pop_front();
- }
- if (!r.empty) {
- arr.push_back(r.join(""));
- }
- return arr;
- }
- auto ChatModDB := ProfileDB
- WorldDB.exec("CREATE TABLE IF NOT EXISTS chat_log(id INTEGER PRIMARY KEY AUTOINCREMENT, sender_uuid BLOB CHECK(valid_uuid(sender_uuid)), sender_name TEXT, content TEXT);")
- global chat_log_stmt = WorldDB.prepare("INSERT INTO chat_log(sender_uuid, sender_name, content) VALUES (?, ?, ?);")
- ChatModDB.exec("CREATE TABLE IF NOT EXISTS chat_mod(uuid BLOB PRIMARY KEY CHECK(valid_uuid(uuid)), prefix TEXT, suffix TEXT, tails TEXT) WITHOUT ROWID;")
- global chat_mod_query = ChatModDB.prepare("SELECT ifnull(prefix, ''), ifnull(suffix, ''), ifnull(tails, '') FROM chat_mod WHERE uuid=?;")
- global chat_mod_update = [
- "prefix": ChatModDB.prepare("INSERT INTO chat_mod(uuid, prefix) VALUES (?, ?) ON CONFLICT(uuid) DO UPDATE SET prefix=excluded.prefix;"),
- "suffix": ChatModDB.prepare("INSERT INTO chat_mod(uuid, suffix) VALUES (?, ?) ON CONFLICT(uuid) DO UPDATE SET suffix=excluded.suffix;"),
- "tails": ChatModDB.prepare("INSERT INTO chat_mod(uuid, tails) VALUES (?, ?) ON CONFLICT(uuid) DO UPDATE SET tails=excluded.tails;")
- ];
- dbus_chat_start(fun(string message) {
- forEachPlayer(fun[message](ServerPlayer n) {
- n.sendMessage("system։ " + message)
- })
- })
- setChatHook(fun(ServerPlayer sp, string message) {
- auto sender = sp.getNameTag();
- Log.info("CHAT", sender + ": " + message);
- dbus_chat_log(sender, message);
- auto uuid = sp.getUUID();
- chat_log_stmt.bind(1, uuid);
- chat_log_stmt.bind(2, sp.getNameTag());
- chat_log_stmt.bind(3, message);
- chat_log_stmt.step();
- chat_log_stmt.reset();
- chat_log_stmt.clear();
- auto send;
- chat_mod_query.bind(1, uuid);
- switch (chat_mod_query.step()) {
- case (ROW) {
- send = fun[sender, message](n) { n.sendMessage(chat_mod_query.get(0) + sender + chat_mod_query.get(1) + "։ " + message + chat_mod_query.get(2)); };
- break;
- }
- case (DONE) {
- send = fun[sender, message](n) { n.sendMessage(sender + "։ " + message); };
- }
- }
- forEachPlayer(fun[send](ServerPlayer n) {
- send(n);
- });
- chat_mod_query.clear();
- chat_mod_query.reset();
- });
- {
- auto chatOverload = CommandOverload()
- chatOverload.add(Param_target_wildcard("target", false));
- auto modEnum = EnumDef("chat_mod")
- modEnum.add("prefix");
- modEnum.add("suffix");
- modEnum.add("tails");
- chatOverload.add(Param_enum("attr", false, modEnum));
- chatOverload.add(Param_message("text", false));
- defcmd2("setchat", "Set chat option to players", 0, 0, fun(orig, list, str) {
- if (list.size() == 0) {
- return "No players selected";
- }
- auto spd = str.eat();
- auto key := spd[0];
- auto value := spd[1];
- if (chat_mod_update.count(key) == 0) {
- return "Illegal attr"
- }
- auto stmt := chat_mod_update[key];
- auto res = "success";
- for (item : list) {
- stmt.bind(1, item.getUUID());
- stmt.bind(2, value);
- stmt.step();
- stmt.reset();
- stmt.clear();
- }
- return res;
- }).add(chatOverload);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement