Browse Source

godcmd: add temp passwd

develop
lanvent 1 year ago
parent
commit
898aa30b1d
4 changed files with 32 additions and 11 deletions
  1. +12
    -3
      common/log.py
  2. +5
    -2
      common/package_manager.py
  3. +11
    -5
      plugins/godcmd/godcmd.py
  4. +4
    -1
      plugins/plugin_manager.py

+ 12
- 3
common/log.py View File

@@ -2,9 +2,13 @@ import logging
import sys import sys




def _get_logger():
log = logging.getLogger('log')
log.setLevel(logging.INFO)
def _reset_logger(log):
for handler in log.handlers:
handler.close()
log.removeHandler(handler)
del handler
log.handlers.clear()
log.propagate = False
console_handle = logging.StreamHandler(sys.stdout) console_handle = logging.StreamHandler(sys.stdout)
console_handle.setFormatter(logging.Formatter('[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - %(message)s', console_handle.setFormatter(logging.Formatter('[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')) datefmt='%Y-%m-%d %H:%M:%S'))
@@ -13,6 +17,11 @@ def _get_logger():
datefmt='%Y-%m-%d %H:%M:%S')) datefmt='%Y-%m-%d %H:%M:%S'))
log.addHandler(file_handle) log.addHandler(file_handle)
log.addHandler(console_handle) log.addHandler(console_handle)

def _get_logger():
log = logging.getLogger('log')
_reset_logger(log)
log.setLevel(logging.INFO)
return log return log






+ 5
- 2
common/package_manager.py View File

@@ -1,11 +1,14 @@
import time import time
import pip import pip
from pip._internal import main as pipmain
from common.log import logger,_reset_logger


def install(package): def install(package):
pip.main(['install', package])
pipmain(['install', package])


def install_requirements(file): def install_requirements(file):
pip.main(['install', '-r', file, "--upgrade"])
pipmain(['install', '-r', file, "--upgrade"])
_reset_logger(logger)


def check_dulwich(): def check_dulwich():
needwait = False needwait = False


+ 11
- 5
plugins/godcmd/godcmd.py View File

@@ -2,6 +2,8 @@


import json import json
import os import os
import random
import string
import traceback import traceback
from typing import Tuple from typing import Tuple
from bridge.bridge import Bridge from bridge.bridge import Bridge
@@ -158,7 +160,11 @@ class Godcmd(Plugin):
else: else:
with open(config_path,"r") as f: with open(config_path,"r") as f:
gconf=json.load(f) gconf=json.load(f)
if gconf["password"] == "":
self.temp_password = "".join(random.sample(string.digits, 4))
logger.info("[Godcmd] 因未设置口令,本次的临时口令为%s。"%self.temp_password)
else:
self.temp_password = None
custom_commands = conf().get("clear_memory_commands", []) custom_commands = conf().get("clear_memory_commands", [])
for custom_command in custom_commands: for custom_command in custom_commands:
if custom_command and custom_command.startswith("#"): if custom_command and custom_command.startswith("#"):
@@ -167,7 +173,7 @@ class Godcmd(Plugin):
COMMANDS["reset"]["alias"].append(custom_command) COMMANDS["reset"]["alias"].append(custom_command)


self.password = gconf["password"] self.password = gconf["password"]
self.admin_users = gconf["admin_users"] # 预存的管理员账号,这些账号不需要认证 TODO: 用户名每次都会变,目前不可用
self.admin_users = gconf["admin_users"] # 预存的管理员账号,这些账号不需要认证。itchat的用户名每次都会变,不可用
self.isrunning = True # 机器人是否运行中 self.isrunning = True # 机器人是否运行中


self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context
@@ -358,9 +364,6 @@ class Godcmd(Plugin):
if isadmin: if isadmin:
return False,"管理员账号无需认证" return False,"管理员账号无需认证"
if len(self.password) == 0:
return False,"未设置口令,无法认证"
if len(args) != 1: if len(args) != 1:
return False,"请提供口令" return False,"请提供口令"
@@ -368,6 +371,9 @@ class Godcmd(Plugin):
if password == self.password: if password == self.password:
self.admin_users.append(userid) self.admin_users.append(userid)
return True,"认证成功" return True,"认证成功"
elif password == self.temp_password:
self.admin_users.append(userid)
return True,"认证成功,请尽快设置口令"
else: else:
return False,"认证失败" return False,"认证失败"




+ 4
- 1
plugins/plugin_manager.py View File

@@ -238,7 +238,7 @@ class PluginManager:
if os.path.exists(os.path.join(dirname,"requirements.txt")): if os.path.exists(os.path.join(dirname,"requirements.txt")):
logger.info("detect requirements.txt,installing...") logger.info("detect requirements.txt,installing...")
pkgmgr.install_requirements(os.path.join(dirname,"requirements.txt")) pkgmgr.install_requirements(os.path.join(dirname,"requirements.txt"))
return True, "安装插件成功,请扫描插件或重启程序"
return True, "安装插件成功,请使用#scanp命令扫描插件或重启程序"
except Exception as e: except Exception as e:
logger.error("Failed to install plugin, {}".format(e)) logger.error("Failed to install plugin, {}".format(e))
return False, "安装插件失败,"+str(e) return False, "安装插件失败,"+str(e)
@@ -254,6 +254,9 @@ class PluginManager:
import shutil import shutil
shutil.rmtree(dirname) shutil.rmtree(dirname)
rawname = self.plugins[name].name rawname = self.plugins[name].name
for event in self.listening_plugins:
if name in self.listening_plugins[event]:
self.listening_plugins[event].remove(name)
del self.plugins[name] del self.plugins[name]
del self.pconf["plugins"][rawname] del self.pconf["plugins"][rawname]
self.loaded[dirname] = None self.loaded[dirname] = None


Loading…
Cancel
Save