Exemple #1
0
def oninfo(ev,server,plugin):
  if ev['content'] == '!!here':
    t = getPlayerInfo(server, ev['sender'], 'Pos')
    t2 = getPlayerInfo(server, ev['sender'], 'Dimension')
    server.say(CC(ev['sender'], 'f'), CC(' 位于 ', 'e'), getpos(int(t[0]),int(t[1]),int(t[2]), int(t2)))
    server.say("[name:{0}, x:{1}, y:{2}, z:{3}, dim:{4}, world:{5}]".format(ev['sender'], int(t[0]),int(t[1]),int(t[2]), int(t2), getdim(int(t2))))
    server.tell(ev['sender'], CC('您将会被高亮 30 秒!', '6'))
    server.execute('effect give ' + ev['sender'] + ' glowing 30 2')
Exemple #2
0
def add_bot(server, sender, name, lint, tp_here=True):
    if not checkname(server, name):
        server.tell(sender, CC("[BOT] ", "d"), CC("非法的用户名", "c"))
    else:
        server.tell(sender, CC("[BOT] ", "d"),
                    CC("尝试召唤了机器人。如果10秒后没有加入游戏,说明不存在该正版id", "e"))
        server.execute("/player " + name + " spawn")
        global trylist
        trylist.append([sender, name, lint, tp_here])
Exemple #3
0
def onleave(ev, server, plugin):
    global botlist
    rem = []
    for bot in botlist:
        if ev["sender"].lower() == bot[1].lower():
            server.say(CC("[BOT] ", "d"), CC("机器人 ", "e"), CC(bot[1], "6"),
                       CC(" 离开了。", "e"))
            rem.append(bot)
    for bot in rem:
        botlist.remove(bot)
Exemple #4
0
def makeConfirm(server, user):
    if user not in [
            "ImSingularity", "2233Cheers", "ImLinDun", "Herbst_Q", "AFallLeaf",
            False
    ]:
        server.tell(user, CC("[IB] ", "a"), CC("你没有确认回档的权限。", "c"))
    else:
        global confirmed, dest
        if inProgress and dest is not None: confirmed = True
        else: server.tell(user, CC("[IB] ", "a"), CC("没有什么可确认的。", "c"))
Exemple #5
0
def log_bot(server, sender):
    global botlog
    for log in botlog:
        server.tell(
            sender, CC("[BOT] ", "d"),
            CC(
                "{0}  玩家 ".format(
                    datetime.datetime.fromtimestamp(
                        log[3]).strftime("%m-%d %H:%M:%S %p")), "e"),
            CC("console" if log[1] == False else log[1], "f"),
            CC(" 召唤 " if log[0] == 1 else " 踢出 ", "e"), CC(log[2], "6"))
Exemple #6
0
 def register(self, id):
     self.server.debug(CC("注册插件事件钩子: "),
                       CC(str(self.plugs[id]["plugin"].listener), "el"))
     for listener in self.plugs[id]["plugin"].listener:
         t = {
             "id": uuid.uuid4(),
             "type": listener["type"],
             "func": listener["func"]
         }
         if self.event.bind(listener["type"], listener["func"], t["id"]):
             self.plugs[id]["listener"].append(t)
Exemple #7
0
def doclick(server, sender, typ, cot):
  command = None
  if cot == "once": command = "/player " + sender + " " + typ + " once"
  elif cot == "keep": command = "/player " + sender + " " + typ + " continuous"
  elif cot.startswith("every"): command = "/player " + sender + " " + typ + " interval " + cot[6:]
  if command:
    server.execute(command)
    server.tell(sender, CC("[SELF] ","d"), CC("执行操作 ", "e"), CC(typ, "6"), CC(" "), CC(cot, "6"))
  else:
    server.tell(sender, CC("[SELF] ","d"), CC("无法执行操作 ", "e"), CC(typ, "6"), CC(" "), CC(cot, "6"))
Exemple #8
0
def conv(server,ev):
  global locs
  args = ev['content'].split(' ')
  t = getloc(args[2])
  if t == False:
    server.tell(ev['sender'], CC('[LOC] ','b'), CC('找不到该路标,请检查输入!', 'c'))
    return
  t1 = convloc(t[0])
  if t1 is None:
    server.tell(ev['sender'], CC('[LOC] ','b'), CC('该路标位于末地!', 'c'))
  showloc(server,ev['sender'],t[0],t[1])
  showlocx(server,ev['sender'],t[0],t[1])
  showloc(server,ev['sender'],t1,t[1])
  showlocx(server,ev['sender'],t1,t[1])
Exemple #9
0
def tracker(server,plugin,header,remote):
  global cfg
  getLogger("requests").setLevel(__import__("logging").WARNING)
  getLogger("urllib3").setLevel(__import__("logging").WARNING)
  getLogger("urllib3.connection").setLevel(__import__("logging").WARNING)
  getLogger("urllib3.connectionpool").setLevel(__import__("logging").WARNING)
  while True:
    try:
      with requests.get(remote + '/api/messages', headers=header, stream=False) as r:
        r.raise_for_status()
        for i in r.json():
          text = i
          if "event" not in text or text["event"] != "": continue
          l.debug("gateway %s sent message %s, sender %s", text["gateway"], text["text"],text["username"])
          if text["gateway"] == "discord-minecraft":
            try:
              server.say(CC("[Discord] ", "b"), CC("<" + text["username"] + "> ", "7"), CC(text["text"], "f"))
            except:
              pass
          else:
            try:
              server.say(CC("[DiscordAdmin] ", "c"), CC("<" + text["username"] + "> ", "7"), CC(text["text"], "f"))
            except:
              pass
            if text["text"] == "stop":
              l.info("服务器被远程停止。")
              sendadmin("服务器被远程停止。")
              server.stop()
            elif text["text"] == "start":
              l.info("服务器被远程开启。")
              sendadmin("服务器被远程开启。")
              server.start()
            elif text["text"] == "forcestop":
              l.info("服务器被强制停止。")
              sendadmin("服务器被强制停止。")
              server.stop(True)
            elif text["text"] == "save-all":
              l.info("服务器存档保存。")
              sendadmin("服务器存档保存。")
              server.execute("save-all")
            elif text["text"] == "help":
              sendadmin("  可用指令有:")
              sendadmin("  --  stop,start,forcestop,save-all")
        time.sleep(4)
    except SystemExit:
      return
    except:
      l.warning("MatterBridge 无法从服务器获取信息。")
      # __import__("traceback").print_exc(file=sys.stdout)
      time.sleep(30)
Exemple #10
0
def oninfo(ev, server, plugin):
    pos = plugin.getplugin("PlayerInfoAPI").getPlayerInfo(
        server, ev["sender"], "Pos")
    dim = plugin.getplugin("PlayerInfoAPI").getPlayerInfo(
        server, ev["sender"], "Dimension")
    if pos == None: return
    server.say(
        CC(ev['sender'], 'f'), CC(" 死亡地点位于", "e"),
        CC(
            " {0} [{1},{2},{3}]".format(["地狱", "主世界", "末地"][dim + 1],
                                        int(pos[0]), int(pos[1]), int(pos[2])),
            "6"))
    server.say("[name:{0}, x:{1}, y:{2}, z:{3}, dim:{4}, world:{5}]".format(
        ev["sender"] + "死亡地点", int(pos[0]), int(pos[1]), int(pos[2]), dim,
        getdim(dim)))
Exemple #11
0
def get(server,ev):
  global locs
  args = ev['content'].split(' ')
  t = getloc(args[1])
  if t == False:
    for (j,i) in enumerate(locs):
      if args[1].lower()  in i['name'].lower():
        showloc(server,ev['sender'],i,j)
        showlocx(server,ev['sender'],i,j)
        t = True
    if t == False:
      server.tell(ev['sender'], CC('[LOC] ','b'), CC('找不到任何路标,请检查输入!', 'c'))
  else:
    showloc(server,ev['sender'], t[0],t[1])
    showlocx(server,ev['sender'],t[0],t[1])
Exemple #12
0
 def trigger(self, trigger, eventinfo, asyncrun="-"):
     self.server.debug(CC("事件 "), CC(str(trigger), "el"), CC(" 被触发!"))
     if asyncrun == "-":
         if trigger in [TRIGGER.PLUGIN_UNLOADING, TRIGGER.SERVER_HALT]:
             asyncrun = False
         else:
             asyncrun = True
     for func in self.fs[trigger.value].items():
         if asyncrun:
             self._asyncRun(func[1], (eventinfo, self.server, self.plugin))
         else:
             try:
                 func[1](eventinfo, self.server, self.plugin)
             except:
                 traceback.print_exc()
                 l.warning("事件 %s 触发 %s 时产生了异常!检查插件代码。", trigger, func[1])
Exemple #13
0
 def load(self, pluginPath):
     stage = 0
     try:
         self.server.debug(CC("加载插件中: "), CC(pluginPath, "el"))
         spec = importlib.util.spec_from_file_location(
             "p_" + pluginPath.replace("plugins/", "").replace(
                 ".py", "").replace("plugins\\", ""), pluginPath)
         self.plugs.append(
             {"plugin": importlib.util.module_from_spec(spec)})
         stage = 1
         spec.loader.exec_module(self.plugs[-1]["plugin"])
         self.plugs[-1]["id"] = self.id
         self.plugs[-1]["listener"] = []
         self.plugs[-1]["name"] = self.plugs[-1]["plugin"].name
         self.id += 1
         stage = 2
         self.register(len(self.plugs) - 1)
         self.server.debug(CC("插件加载完成: "), CC(pluginPath, "el"))
         return self.plugs[-1]["id"]
     except:
         self.server.debug(CC("无法加载插件: "), CC(pluginPath, "el"))
         self.server.debug(CC("错误堆栈详见控制台。", "l"))
         __import__("traceback").print_exc(file=sys.stdout)
         if stage == 2:
             try:
                 self.deregister(len(self.plugs) - 1)
             except:
                 pass
             self.id -= 1
         if stage >= 1: self.plugs.pop()
         return False
Exemple #14
0
def addHere(server, ev):
  global locs
  args = ev['content'].split(' ')
  t = checkname(args[2])
  if t != False:
    server.tell(ev['sender'], CC('[LOC] ','b'),CC(t,'c'))
    return
  t = getPlayerInfo(server, ev["sender"], "Pos")
  t1 = getPlayerInfo(server, ev["sender"], "Dimension")
  locs.append({'name': args[2], 'pos': {'x': int(t[0]),'y': int(t[1]),'z': int(t[2])},'dim': t1})
  server.say(CC('[LOC] ','b'),CC(ev['sender'], 'f'), CC(' 添加了路标 ', 'e'), CC(locs[-1]['name'], '6'), CC(' 位于 ', 'e'),
  getpos(locs[-1]), CC(',ID 为 ', 'e'), CC(str(len(locs) - 1), '6'))
Exemple #15
0
def printhelp(server):
    global cfg, data, inProgress
    if not inProgress:
        for t in """Increasing Backup 帮助
!!ib help - 查看此帮助
!!ib backup <说明> - 建立新备份
!!ib restore <ID> - 回档到 <ID>
!!ib view - 查看所有备份
!!ib refresh - 手动刷新备份列表-不推荐使用
!!ib confirm/abort 确认/取消 回档操作。""".split("\n"):
            server.say(CC(t, "e"))
Exemple #16
0
def printhelp(server):
  for t in """Location 路标插件 帮助
!!loc help - 查看此帮助
!!loc save - 立刻保存所有路标到硬盘
!!loc add <路标名称> <X> <Y> <Z> <世界ID> - 新建一个路标
!!loc add <路标名称> here - 在你所在的位置新建路标
!!loc del <路标名称或 ID> - 删除一个路标
!!loc conv <路标名称或 ID> - 查看一个路标对应的地狱坐标或主世界坐标
!!loc ex - 以 VoxelMap 格式显示所有坐标
!!loc <路标名称或 ID> - 查看一个路标的信息。若该路标不存在,将在所有路标中搜索。
!!loc - 查看所有路标
世界 ID 说明: 0 - 主世界,1 - 末地,-1 - 地狱""".split("\n"): server.say(CC(t,"e"))
Exemple #17
0
def oncmd(ev, server, plugin):
    t = ev["content"]
    if not t.startswith("!!ib"): return
    g = t.split(" ")
    if (len(g) == 2 and g[1] == "help") or (len(g) == 1):
        printhelp(server)
    elif (len(g) >= 2 and g[1] == "view"):
        makeView(server)
    elif (len(g) >= 2 and g[1] == "backup"):
        if len(g) == 2: makeBackup(server)
        else: makeBackup(server, ' '.join(g[2:]))
    elif (len(g) >= 3 and g[1] == "restore"):
        makeRestore(server, g[2], plugin)
    elif (len(g) >= 2 and g[1] == "confirm"):
        makeConfirm(server, ev["sender"])
    elif (len(g) >= 2 and g[1] == "refresh"):
        refreshView(server)
    elif (len(g) >= 2 and g[1].startswith("a")):
        makeAbort(server)
    else:
        server.say(CC("[IB] ", "a"), CC("错误的或不存在的指令。输入 !!ib help 查看命令帮助。"))
Exemple #18
0
def add(server, ev):
  global locs
  args = ev['content'].split(' ')
  t = checkname(args[2])
  if t != False:
    server.tell(ev['sender'], CC('[LOC] ','b'),CC(t,'c'))
    return
  locs.append({
    'name': args[2],
    'pos': {'x': int(args[3]),'y': int(args[4]),'z': int(args[5])},
    'dim': int(args[6])
  })
  server.say(CC('[LOC] ','b'),CC(ev['sender'], 'f'), CC(' 添加了路标 ', 'e'), CC(locs[-1]['name'], '6'), CC(' 位于 ', 'e'),
  getpos(locs[-1]), CC(',ID 为 ', 'e'), CC(str(len(locs) - 1), '6'))
Exemple #19
0
def onjoin(ev, server, plugin):
    global botlist, trylist
    rem = []
    for bot in trylist:
        if ev["sender"].lower() == bot[1].lower():
            global botlog
            botlog.append(
                [1, bot[0], bot[1],
                 datetime.datetime.now().timestamp()])
            if len(botlog) > 30: botlog = botlog[len(botlog) - 30:]
            server.say(CC("[BOT] ", "d"), CC(bot[0], "f"), CC(" 召唤了机器人 ", "e"),
                       CC(bot[1], "6"), CC(" 注释 ", "e"), CC(bot[2], "6"))
            rem.append(bot)
            tt = bot[3]
            bot[3] = True
            botlist.append(bot)
            server.execute("gamemode 0 " + bot[1])
            if tt: server.execute("tp " + bot[1] + " " + bot[0])
            elif bot[1] in loclist:
                lc = loclist[bot[1]]
                server.execute(
                    "execute in {0} run tp {1} {2} {3} {4} {5} {6}".format([
                        "the_nether", "overworld", "the_end"
                    ][lc[3] + 1], bot[1], lc[0], lc[1], lc[2], 123, 45))
                time.sleep(1)
                l.debug("execute in {0} run tp {1} {2} {3} {4} {5} {6}".format(
                    ["the_nether", "overworld", "the_end"][lc[3] + 1], bot[1],
                    lc[0], lc[1], lc[2], lc[4], lc[5]))
                server.execute(
                    "execute in {0} run tp {1} {2} {3} {4} {5} {6}".format([
                        "the_nether", "overworld", "the_end"
                    ][lc[3] + 1], bot[1], lc[0], lc[1], lc[2], lc[4], lc[5]))
    for bot in rem:
        trylist.remove(bot)
Exemple #20
0
def makeView(server):
    global cfg, data, inProgress
    if not inProgress:
        server.say(CC("[IB] ", "a"), CC("下面为所有的备份:(ID/说明)", "e"))
        for i, j in enumerate(data["backups"]):
            server.say(
                CC(str(i), "d"), CC(" / ", "f"),
                CC(
                    "无说明" if j["description"].strip() == "" else
                    j["description"], "e"), CC(" / ", "f"),
                CC(
                    datetime.datetime.fromtimestamp(int(
                        j["time"])).strftime('%Y.%m.%d %H:%M:%S')))
Exemple #21
0
def oninfo(ev,server,plugin):
  if ev["sender"] != False and ev["content"].startswith('!!loc'):
    if re.match(r"^!!loc help$", ev["content"]):
      printhelp(server)
    elif re.match(r"^!!loc save$", ev["content"]):
      global locs
      utils.saveData('location', locs)
      server.tell(ev["sender"], CC('[LOC] ','b'), CC('保存完毕', 'e'))
    elif re.match(r"^!!loc add \S+ -?\d+ -?\d+ -?\d+ (-1|0|1)$", ev["content"]):
      add(server, ev)
    elif re.match(r"^!!loc add \S+ here$", ev["content"]):
      addHere(server, ev)
    elif re.match(r"^!!loc del \S+$", ev["content"]):
      delete(server, ev)
    elif re.match(r"^!!loc conv \S+$", ev["content"]):
      conv(server, ev)
    elif re.match(r"^!!loc ex$", ev["content"]):
      getAllVoxel(server, ev)
    elif re.match(r"^!!loc \S+$", ev["content"]):
      get(server, ev)
    elif re.match(r"^!!loc$", ev["content"]):
      getAll(server, ev)
    else:
      server.tell(ev["sender"], CC('[LOC] ','b'), CC('输入无效,使用 !!loc help 查看帮助', 'c'))
Exemple #22
0
def delete(server, ev):
  global locs
  args = ev['content'].split(' ')
  t = getloc(args[2])
  if t == False:
    server.tell(ev['sender'], CC('[LOC] ','b'), CC('找不到对应的路标,请检查输入!', 'c'))
  else:
    t = t[0]
    locs.remove(t)
    server.say(CC('[LOC] ','b'),CC(ev['sender'], 'f'), CC(' 删除了路标 ', 'e'), CC(t['name'], '6'),CC(' 位于 ', 'e'),getpos(t))
Exemple #23
0
def tp_bot(server, sender, name):
    global botlist
    for bot in botlist:
        if bot[1].lower() == name.lower():
            if bot[0].lower() != sender.lower():
                server.tell(sender, CC("[BOT] ", "d"),
                            CC("你不是这个 bot 的主人!", "c"))
                return
            server.tell(sender, CC("[BOT] ", "d"), CC("已发出 tp 申请", "e"))
            server.execute("/tp " + bot[1] + " " + sender)
            return
    server.tell(sender, CC("[BOT] ", "d"), CC("不存在该bot!", "c"))
Exemple #24
0
def save_bot(server, sender, name, plugin):
    global botlist
    for bot in botlist:
        if bot[1].lower() == name.lower():
            if bot[0].lower() != sender.lower() and sender not in [
                    "ImSingularity", "ImLinDun", "Herbst_Q", "2233Cheers"
            ]:
                server.tell(sender, CC("[BOT] ", "d"),
                            CC("你不是这个 bot 的主人!", "e"))
                return
            server.tell(sender, CC("[BOT] ", "d"), CC("已发出 save 申请", "e"))
            storepos(server, bot, plugin)
            return
    server.tell(sender, CC("[BOT] ", "d"), CC("不存在该bot!", "c"))
Exemple #25
0
def oninfo(ev,server,plugin):
  if ev['content'] == '!!whereis' or ev['content'] == '!!whereis help':
    server.tell(ev['sender'], CC('用法:!!whereis <玩家名>', 'e'))
  elif re.match(r"^!!whereis ([a-zA-Z0-9_]{1,16})$", ev['content']):
    player = re.match(r"^!!whereis ([a-zA-Z0-9_]{1,16})$", ev['content']).group(1)
    if not player.lower() in server.playerlist_lower:
      server.tell(ev['sender'], CC('该玩家不存在', 'c'))
    t = getPlayerInfo(server, player, 'Pos')
    t2 = getPlayerInfo(server, player, 'Dimension')
    server.say(CC(player, 'f'), CC(' 位于 ', 'e'), getpos(int(t[0]),int(t[1]),int(t[2]), int(t2)))
    server.say("[name:{0}, x:{1}, y:{2}, z:{3}, dim:{4}, world:{5}]".format(player, int(t[0]),int(t[1]),int(t[2]), int(t2), getdim(int(t2))))
    server.tell(ev['sender'], CC('该玩家将会被高亮 30 秒!', '6'))
    server.tell(player, CC('有人查询您的位置,您将会被高亮 30 秒!', '6'))
    server.execute('effect give ' + player + ' glowing 30 2')
Exemple #26
0
def kickall_bot(server, sender, plugin):
    if sender not in [
            "ImSingularity", "ImLinDun", "2233Cheers", "Herbst_Q", False
    ]:
        server.tell(sender, CC("[BOT] ", "d"), CC("你没有 kickall 的权限", "e"))
        return
    global botlist
    for bot in botlist:
        server.tell(sender, CC("[BOT] ", "d"), CC("已发出 kick ", "e"),
                    CC(bot[1], "6"), CC(" 申请", "e"))
        storepos(server, bot, plugin)
        global botlog
        botlog.append([0, sender, bot[1], datetime.datetime.now().timestamp()])
        if len(botlog) > 30: botlog = botlog[len(botlog) - 30:]
        server.execute("/player " + bot[1] + " kill")
Exemple #27
0
def tppos_bot(server, sender, name, x, y, z, dim):
    global botlist
    for bot in botlist:
        if bot[1].lower() == name.lower():
            if bot[0].lower() != sender.lower():
                server.tell(sender, CC("[BOT] ", "d"),
                            CC("你不是这个 bot 的主人!", "c"))
                return
            server.tell(
                sender, CC("[BOT] ", "d"),
                CC("已发出 tp [{0},{1},{2} {3}] 申请".format(x, y, z, dim), "e"))
            server.execute("/execute in {0} run tp {1} {2} {3} {4}".format(
                dim, bot[1], x, y, z))
            return
    server.tell(sender, CC("[BOT] ", "d"), CC("不存在该bot!", "c"))
Exemple #28
0
 def unload(self, pluginId):
     try:
         self.server.debug(CC("卸载插件 "),
                           CC(self.plugs[pluginId]["name"], "el"),
                           CC(" 中,插件 ID 为 "), CC(pluginId, "al"))
         self.event.trigger(
             TRIGGER.PLUGIN_UNLOADING, {
                 "name": self.plugs[pluginId]["name"],
                 "plugin": self.plugs[pluginId]["plugin"]
             }, False)
         self.deregister(pluginId)
         del self.plugs[pluginId]["plugin"]
         self.plugs[pluginId] = {}
         return True
     except:
         self.server.debug(CC("无法卸载插件 ID "), CC(pluginId, "al"))
         self.server.debug(CC("错误堆栈详见控制台。", "l"))
         __import__("traceback").print_exc(file=sys.stdout)
         return False
Exemple #29
0
def check_bot(server, sender, name):
    global botlist
    for bot in botlist:
        if bot[1].lower() == name.lower():
            if bot[0].lower() != sender.lower():
                server.tell(sender, CC("[BOT] ", "d"),
                            CC("你不是这个 bot 的主人!", "e"))
                return False
            if bot[3] == False:
                server.tell(sender, CC("[BOT] ", "d"),
                            CC("该 bot 处于创造模式!", "e"))
                return False

            return True
    server.tell(sender, CC("[BOT] ", "d"), CC("不存在该bot!", "c"))
    return False
Exemple #30
0
def gm_bot(server, sender, name, gm, plugin):
    global botlist
    for bot in botlist:
        if bot[1].lower() == name.lower():
            if bot[0].lower() != sender.lower() and sender not in [
                    "ImSingularity", "ImLinDun", "Herbst_Q", "2233Cheers"
            ]:
                server.tell(sender, CC("[BOT] ", "d"),
                            CC("你不是这个 bot 的主人!", "e"))
                return
            server.tell(sender, CC("[BOT] ", "d"), CC("已发出 gamemode 申请", "e"))
            if gm == "c": bot[3] = False
            else: bot[3] = True
            server.execute("/gm{0} {1}".format(gm, bot[1]))
            return
    server.tell(sender, CC("[BOT] ", "d"), CC("不存在该bot!", "c"))