Skip to content

Commit

Permalink
release v1.5.3 (#66)
Browse files Browse the repository at this point in the history
refactor: init链
  • Loading branch information
gakkiyomi committed Nov 30, 2023
1 parent 557ef7e commit 66cd5b3
Show file tree
Hide file tree
Showing 4 changed files with 141 additions and 75 deletions.
2 changes: 1 addition & 1 deletion src/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def login(self, username: str, password: str, mfa_code='') -> bool:
return False
else:
print(f"登陆失败: {rsp['msg']}")
sys.exit(1)
sys.exit()

def get_breezemoons(self, page: int = 1, size: int = 10) -> dict | None:
res = requests.get(
Expand Down
201 changes: 137 additions & 64 deletions src/core/__init__.py
Original file line number Diff line number Diff line change
@@ -1,56 +1,140 @@
import json
import os
import sys
from abc import ABC, abstractmethod
from configparser import ConfigParser
from typing import Any

from src.api import FishPi
from src.core.command import init_cli
from src.core.user import check_in, login
from src.core.websocket import init_chatroom

from .chatroom import init_soliloquize, listener
from .config import GLOBAL_CONFIG, AuthConfig, ChatConfig, CliConfig, RedPacketConfig
from .redpacket import render_redpacket


def init_config(api: FishPi, cli_config: CliConfig):
file_path = cli_config.file_path
if file_path is None:
file_path = f'{os.getcwd()}/config.ini'
config = ConfigParser()
try:
print("配置读取中...")
if not os.path.exists(file_path):
print(f'{file_path}配置文件不存在')
__init_default_config(cli_config)
else:
config.read(file_path, encoding='utf-8')
GLOBAL_CONFIG.auth_config = __init_login_auth_config(
config, cli_config)
GLOBAL_CONFIG.redpacket_config = __int_redpacket_config(config)
GLOBAL_CONFIG.chat_config = __init_chat_config(config)
GLOBAL_CONFIG.cfg_path = file_path
except Exception as e:
print(f'{file_path}配置文件不合法')
__init_default_config()
__init_message_listener(api)
init_soliloquize(api)


def __init_message_listener(api: FishPi):
api.add_listener(listener)
api.add_listener(render_redpacket)



def __init_default_config(cli_config: CliConfig):
print("加载系统变量")
GLOBAL_CONFIG.auth_config = AuthConfig()
GLOBAL_CONFIG.redpacket_config = RedPacketConfig()
GLOBAL_CONFIG.chat_config = ChatConfig()
GLOBAL_CONFIG.cfg_path = None
__init_userinfo_with_sys_env(GLOBAL_CONFIG.auth_config)
__init_userinfo_with_cli_config(GLOBAL_CONFIG.auth_config, cli_config)



def __int_redpacket_config(config: ConfigParser) -> RedPacketConfig:
class Initor(ABC):
def __init__(self, next=None):
self.next = next

def __iter__(self):
node = self
while node is not None:
yield node
node = node.next

@abstractmethod
def exec(self, api: FishPi, cli_config: CliConfig) -> None:
pass

def init(self, api: FishPi, cli_config: CliConfig) -> None:
self.exec(api, cli_config)
self.next.init(api, cli_config)


class FileConfigInitor(Initor):
def exec(self, api: FishPi, cli_config: CliConfig) -> None:
file_path = cli_config.file_path
if file_path is None:
file_path = f'{os.getcwd()}/config.ini'
config = ConfigParser()
try:
print("配置读取中...")
if not os.path.exists(file_path):
print(f'{file_path}配置文件不存在')
else:
config.read(file_path, encoding='utf-8')
init_auth_config(config)
GLOBAL_CONFIG.redpacket_config = int_redpacket_config(config)
GLOBAL_CONFIG.chat_config = init_chat_config(config)
GLOBAL_CONFIG.cfg_path = file_path
except Exception as e:
breakpoint()
print(f'{file_path}配置文件不合法')


class DefualtConfigInitor(Initor):
def exec(self, api: FishPi, cli_config: CliConfig) -> None:
print("生成默认配置")
GLOBAL_CONFIG.auth_config = AuthConfig()
GLOBAL_CONFIG.redpacket_config = RedPacketConfig()
GLOBAL_CONFIG.chat_config = ChatConfig()
GLOBAL_CONFIG.cfg_path = None


class EnvConfigInitor(Initor):
def exec(self, api: FishPi, cli_config: CliConfig) -> None:
GLOBAL_CONFIG.auth_config.username = os.environ.get(
"FISH_PI_USERNAME", '')
GLOBAL_CONFIG. auth_config.password = os.environ.get(
"FISH_PI_PASSWORD", '')


class CilConfigInitor(Initor):
def exec(self, api: FishPi, cli_config: CliConfig) -> None:
init_userinfo_with_cli_config(cli_config)


class LoginInitor(Initor):
def exec(self, api: FishPi, cli_config: CliConfig) -> None:
if GLOBAL_CONFIG.auth_config.username is None:
print('用户名不能为空')
sys.exit(0)
if GLOBAL_CONFIG.auth_config.password is None:
print('密码不能为空')
sys.exit(0)
login(api)
check_in(api)


class ChaRoomInitor(Initor):
def exec(self, api: FishPi, cli_config: CliConfig) -> None:
api.add_listener(listener)
api.add_listener(render_redpacket)
init_soliloquize(api)
init_chatroom(api)


class CliInitor(Initor):
def exec(self, api: FishPi, cli_config: CliConfig) -> None:
init_cli(api)


class InitChain(object):
def __init__(self, api: FishPi = None, cli_config: CliConfig = None) -> None:
self.head: Initor = None
self.api = api
self.cli_config = cli_config

def __call__(self, *args: Any, **kwds: Any) -> None:
self.api = kwds['api']
self.cli_config = kwds['cli_config']
self.init()

def append(self, *args) -> None:
curr_node = self.head
sample_generator = (i for i in args)
if curr_node is None:
self.head = next(sample_generator)
curr_node = self.head
for initor in sample_generator:
curr_node.next = initor
curr_node = curr_node.next

def init(self):
self.append(DefualtConfigInitor(),
EnvConfigInitor(),
FileConfigInitor(),
CilConfigInitor(),
LoginInitor(),
ChaRoomInitor(),
CliInitor())
self.head.init(self.api, self.cli_config)


def int_redpacket_config(config: ConfigParser) -> RedPacketConfig:
ret = RedPacketConfig()
if config.getint('redPacket', 'rate') > 0:
ret.rate = config.getint('redPacket', 'rate')
Expand All @@ -73,33 +157,19 @@ def __int_redpacket_config(config: ConfigParser) -> RedPacketConfig:
return ret


def __init_login_auth_config(config: ConfigParser, cli_config: CliConfig) -> AuthConfig:
auth_config = AuthConfig(config.get('auth', 'username'),
config.get('auth', 'password'))
def init_auth_config(config: ConfigParser) -> None:
GLOBAL_CONFIG.auth_config = AuthConfig(config.get('auth', 'username'),
config.get('auth', 'password'))

__init_userinfo_with_sys_env(auth_config)
__init_userinfo_with_cli_config(auth_config, cli_config)
return auth_config


def __init_userinfo_with_sys_env(auth_config: AuthConfig):
auth_config.username = os.environ.get(
"FISH_PI_USERNAME", auth_config.username)
auth_config.password = os.environ.get(
"FISH_PI_PASSWORD", auth_config.password)



def __init_userinfo_with_cli_config(auth_config: AuthConfig, cli_config: CliConfig):
def init_userinfo_with_cli_config(cli_config: CliConfig) -> None:
if cli_config.username is not None and cli_config.password is not None:
auth_config.username = cli_config.username
auth_config.password = cli_config.password
auth_config.mfa_code = cli_config.code
return auth_config
GLOBAL_CONFIG.auth_config.username = cli_config.username
GLOBAL_CONFIG.auth_config.password = cli_config.password
GLOBAL_CONFIG.auth_config.mfa_code = cli_config.code



def __init_chat_config(config: ConfigParser) -> ChatConfig:
def init_chat_config(config: ConfigParser) -> ChatConfig:
ret = ChatConfig()
ret.repeat_mode_switch = config.getboolean('chat', 'repeatMode')
ret.answer_mode = config.getboolean('chat', "answerMode")
Expand All @@ -111,3 +181,6 @@ def __init_chat_config(config: ConfigParser) -> ChatConfig:
if ret.blacklist.__contains__(''):
ret.blacklist.remove('')
return ret


FishPiInitor = InitChain()
11 changes: 2 additions & 9 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,13 @@
import click

from src.api import API
from src.core import init_config
from src.core.command import init_cli
from src.core import FishPiInitor
from src.core.config import CliConfig
from src.core.user import check_in, login
from src.core.websocket import init_chatroom
from src.utils.version import __version__


def run(config: CliConfig):
init_config(API, config)
login(API)
check_in(API)
init_chatroom(API)
init_cli((API))
FishPiInitor(api=API, cli_config=config)


@click.command()
Expand Down
2 changes: 1 addition & 1 deletion src/utils/version.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-

__version__ = "1.5.2"
__version__ = "1.5.3"

0 comments on commit 66cd5b3

Please sign in to comment.