diff --git a/module/botsendmsg.py b/module/botsendmsg.py new file mode 100644 index 0000000..989d3cc --- /dev/null +++ b/module/botsendmsg.py @@ -0,0 +1,32 @@ +import time +import random +from module.config import config +from mirai import * +from module.logger import log + +adapter = HTTPAdapter(verify_key=config["key"], host=config["hostname"], port=config["post"]) +bot = Mirai(qq=config["QQ"], adapter=adapter) + + +async def say_group(group, msg): + print("[消息]->群:{group}:{msg}".format(group=group, msg=msg)) + time.sleep(random.uniform(1.0, 0.3)) + await bot.send_group_message(group, MessageChain([ + Plain(msg) + ])) + + +async def say_group_info(group, msg): + log.info("[消息]->群:{group}:{msg}".format(group=group, msg=msg)) + time.sleep(random.uniform(1.0, 0.3)) + await bot.send_group_message(group, MessageChain([ + Plain(msg) + ])) + + +async def say_group_warning(group, msg): + log.warning("[消息]->群:{group}:{msg}".format(group=group, msg=msg)) + time.sleep(random.uniform(1.0, 0.3)) + await bot.send_group_message(group, MessageChain([ + Plain(msg) + ])) diff --git a/module/config.py b/module/config.py index da6b717..75188ff 100644 --- a/module/config.py +++ b/module/config.py @@ -1,6 +1,7 @@ # 配置文件 import json from pathlib import Path +from module.logger import log def New_config(): @@ -23,14 +24,14 @@ def New_config(): "RCON_host": "127.0.0.1", # RCON地址 "RCON_post": "1337", # RCON端口 } - print("[Bot]正在尝试创建配置文件") + log.debug("[Bot]正在尝试创建配置文件") try: with open("config.json", "w") as write_file: json.dump(config, write_file, indent="\t", sort_keys=True) except: - print("[Bot]配置文件创建失败") + log.error("[Bot]配置文件创建失败") else: - print("[Bot]配置文件创建成功") + log.debug("[Bot]配置文件创建成功") config = Path("config.json") @@ -41,8 +42,7 @@ def New_config(): try: config = json.load(open("config.json", "r")) except: - print("[Bot]Json文件已损坏,正在尝试重新创建") + log.error("[Bot]Json文件已损坏,正在尝试重新创建") New_config() else: break - print(config["QQ"]) diff --git a/module/logger.py b/module/logger.py new file mode 100644 index 0000000..6c81ffc --- /dev/null +++ b/module/logger.py @@ -0,0 +1,42 @@ + +import sys +import logging +from logging import handlers +import datetime +import os + +# 日志级别关系映射 +level_relations = { + 'debug': logging.DEBUG, + 'info': logging.INFO, + 'warning': logging.WARNING, + 'error': logging.ERROR, + 'crit': logging.CRITICAL +} + + +logs = os.path.join('logs') +if not os.path.exists(logs): + os.makedirs(logs) + + +def outputlog(filename, level="info"): + # 创建日志对象 + log = logging.getLogger(filename) + # 设置日志级别 + log.setLevel(level_relations.get(level)) + # 日志输出格式 + fmt = logging.Formatter('[{time}] - %(levelname)s: %(message)s'.format(time=datetime.datetime.strftime(datetime.datetime.now(), '%H:%M:%S'))) + # 输出到控制台 + console_handler = logging.StreamHandler(sys.stdout) + console_handler.setFormatter(fmt) + # 输出到文件 + file_handler = handlers.TimedRotatingFileHandler(filename=filename, when='D', backupCount=1, encoding='utf-8') + file_handler.setFormatter(fmt) + log.addHandler(console_handler) + log.addHandler(file_handler) + return log + + +# 明确指定日志输出的文件路径和日志级别 +log = outputlog('./logs/output.log', 'debug') \ No newline at end of file diff --git a/module/servertools.py b/module/servertools.py index d0783ec..0741eca 100644 --- a/module/servertools.py +++ b/module/servertools.py @@ -1,53 +1,54 @@ # 模块 from rcon.source import * -from modes.config import * +from module.config import * +from module.logger import log # 发送群消息 + # 服务器执行 async def server_run(command): try: - print("[RCON]执行命令:{comm}".format(comm=command)) + log.debug("[RCON]执行命令:{comm}".format(comm=command)) return await rcon( command, host=config["RCON_host"], port=config["RCON_post"], passwd=config["RCON_password"] ) except: - print("[RCON]发生错误,请检查配置是否出错") + log.error("[RCON]发生错误,请检查配置是否出错") # 添加白名单 -async def whtielist_add(player): +async def whitelist_add(player): output = await server_run("whitelist add {player}".format(player=player)) if "Player is already whitelisted" in output: print("[白名单-add]:该玩家已拥有白名单") elif "Added" in output: - print("[白名单-add]:已成功给予{player}白名单".format(player=player)) + log.info("[白名单-add]:已成功给予{player}白名单".format(player=player)) # 移除白名单 -async def whtielist_del(player): +async def whitelist_del(player): output = await server_run("whitelist remove {player}".format(player=player)) if "Player is not whitelisted" in output: print("[白名单-del]:该玩家未拥有白名单") elif "Removed" in output: - print("[白名单-del]:已成功移除{player}白名单".format(player=player)) + log.info("[白名单-del]:已成功移除{player}白名单".format(player=player)) # ban 添加 async def ban_add(player, reason=None): - await whtielist_del(player) + await whitelist_del(player) output = await server_run("ban {player} {reason}".format(player=player, reason=reason)) if "Nothing changed. The player is already banned" in output: print("[黑名单-add]:该玩家已在黑名单列表") elif "Banned by" in output: - print("[黑名单-add]:已成功将{player}移入黑名单".format(player=player)) + log.info("[黑名单-add]:已成功将{player}移入黑名单".format(player=player)) # 删除 async def ban_del(player): - await whtielist_add(player) output = await server_run("pardon {player}".format(player=player)) if "Nothing changed. The player isn't banned" in output: print("[白名单-del]:该玩家未在黑名单内") elif "Unbanned" in output: - print("[黑名单-del]:已成功移出{player}黑名单".format(player=player)) + log.info("[黑名单-del]:已成功移出{player}黑名单".format(player=player)) diff --git a/module/sqlrelated.py b/module/sqlrelated.py new file mode 100644 index 0000000..297d2aa --- /dev/null +++ b/module/sqlrelated.py @@ -0,0 +1,54 @@ +import pymysql +from module.config import config +from module.logger import log + +# 连接数据库 +db = pymysql.connect( + host=config["db_host"], + user=config["db_user"], + password=config["db_password"], + database=config["database"] +) +cursor = db.cursor() +cursor.execute("SELECT VERSION()") +data = cursor.fetchone() +log.debug("数据库版本 : %s " % data) + +async def sql_run(sql=None): + try: + # 执行sql语句 + if sql is not None: + cursor.execute(sql) + # 提交到数据库执行 + db.commit() + log.info("[数据库]命令执行成功~") + except: + # 如果发生错误则回滚 + db.rollback() + log.error("[数据库]数据库发生错误,执行失败") + +# 创建数据表 +if cursor.execute("show tables") != 3: + log.info("数据表不存在,正在尝试创建1/3") + create_table_whitelist = """create table whitelist ( + id float(5) PRIMARY KEY AUTO_INCREMENT, + QQ char(16) UNIQUE not null, + player_name char(16) UNIQUE not null + )""" + log.info("数据表不存在,正在尝试创建2/3") + create_table_wait = """create table wait( + id float(5) PRIMARY KEY AUTO_INCREMENT, + QQ char(16) UNIQUE not null, + player_name char(16) UNIQUE not null, + pass boolean, + pass_info char(50) + )""" + log.info("数据表不存在,正在尝试创建3/3") + create_table_banlist = """create table banlist( + player_name char(16) UNIQUE not null, + reason char(30) + )""" + cursor.execute(create_table_whitelist) + cursor.execute(create_table_wait) + cursor.execute(create_table_banlist) + log.debug("数据表创建完成") \ No newline at end of file