mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-03-20 03:57:30 +08:00
refactor (module): improve the implementation of base classes
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from abc import abstractmethod, ABCMeta
|
||||
from typing import Tuple, Union, Dict, Any, Optional
|
||||
from typing import Dict, Any, Optional, Generic, Tuple, Union, TypeVar
|
||||
|
||||
from app.schemas import Notification, MessageChannel, NotificationConf, MediaServerConf
|
||||
from app.schemas import Notification, MessageChannel, NotificationConf, MediaServerConf, DownloaderConf
|
||||
|
||||
|
||||
class _ModuleBase(metaclass=ABCMeta):
|
||||
@@ -49,35 +49,46 @@ class _ModuleBase(metaclass=ABCMeta):
|
||||
pass
|
||||
|
||||
|
||||
class _MessageBase:
|
||||
# 定义一个泛型 T,用于表示具体的配置类型
|
||||
TConf = TypeVar("TConf")
|
||||
|
||||
|
||||
class ConfManagerBase(Generic[TConf]):
|
||||
"""
|
||||
消息基类
|
||||
通用管理基类,支持配置管理和实例管理
|
||||
"""
|
||||
|
||||
_channel: MessageChannel = None
|
||||
_configs: Dict[str, NotificationConf] = {}
|
||||
_clients: Dict[str, Any] = {}
|
||||
_configs: Dict[str, TConf] = {}
|
||||
_instances: Dict[str, Any] = {}
|
||||
|
||||
def get_client(self, name: str) -> Optional[Any]:
|
||||
def get_instance(self, name: str) -> Optional[Any]:
|
||||
"""
|
||||
获取客户端
|
||||
获取实例 (如服务/客户端)
|
||||
"""
|
||||
if not name:
|
||||
return None
|
||||
return self._clients.get(name)
|
||||
return self._instances.get(name)
|
||||
|
||||
def get_config(self, name: str, ctype: str = None) -> Optional[NotificationConf]:
|
||||
def get_config(self, name: str, ctype: str = None) -> Optional[TConf]:
|
||||
"""
|
||||
获取配置
|
||||
获取配置,支持类型过滤
|
||||
"""
|
||||
if not name:
|
||||
return None
|
||||
conf = self._configs.get(name)
|
||||
if not ctype:
|
||||
return conf
|
||||
return conf if conf.type == ctype else None
|
||||
return conf if getattr(conf, "type", None) == ctype else None
|
||||
|
||||
def checkMessage(self, message: Notification, source: str = None) -> bool:
|
||||
|
||||
class _MessageBase(ConfManagerBase[NotificationConf]):
|
||||
"""
|
||||
消息基类,继承了通用的配置和实例管理功能,指定配置类型为 NotificationConf
|
||||
"""
|
||||
|
||||
_channel: MessageChannel = None
|
||||
|
||||
def check_message(self, message: Notification, source: str = None) -> bool:
|
||||
"""
|
||||
检查消息渠道及消息类型,如不符合则不处理
|
||||
"""
|
||||
@@ -97,45 +108,25 @@ class _MessageBase:
|
||||
return True
|
||||
|
||||
|
||||
class _DownloaderBase:
|
||||
class _DownloaderBase(ConfManagerBase[DownloaderConf]):
|
||||
"""
|
||||
下载器基类
|
||||
"""
|
||||
|
||||
_servers: Dict[str, Any] = {}
|
||||
_default_server: Any = None
|
||||
_default_server_name: str = None
|
||||
|
||||
def get_server(self, name: str = None) -> Optional[Any]:
|
||||
def get_instance(self, name: str = None) -> Optional[Any]:
|
||||
"""
|
||||
获取服务器,name为空则返回默认服务器
|
||||
获取实例,name为空时,返回默认实例
|
||||
"""
|
||||
if name:
|
||||
return self._servers.get(name)
|
||||
return self.get_instance(name)
|
||||
return self._default_server
|
||||
|
||||
|
||||
class _MediaServerBase:
|
||||
class _MediaServerBase(ConfManagerBase[MediaServerConf]):
|
||||
"""
|
||||
媒体服务器基类
|
||||
"""
|
||||
|
||||
_servers: Dict[str, Any] = {}
|
||||
_configs: Dict[str, MediaServerConf] = {}
|
||||
|
||||
def get_server(self, name: str) -> Optional[Any]:
|
||||
"""
|
||||
获取Plex服务器
|
||||
"""
|
||||
return self._servers.get(name)
|
||||
|
||||
def get_config(self, name: str, mtype: str = None) -> Optional[MediaServerConf]:
|
||||
"""
|
||||
获取配置
|
||||
"""
|
||||
if not name:
|
||||
return None
|
||||
conf = self._configs.get(name)
|
||||
if not mtype:
|
||||
return conf
|
||||
return conf if conf.type == mtype else None
|
||||
pass
|
||||
|
||||
@@ -17,7 +17,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
初始化模块
|
||||
"""
|
||||
# 读取媒体服务器配置
|
||||
self._servers: Dict[str, Emby] = {}
|
||||
self._instances: Dict[str, Emby] = {}
|
||||
self._configs: Dict[str, MediaServerConf] = {}
|
||||
mediaservers = MediaServerHelper().get_mediaservers()
|
||||
if not mediaservers:
|
||||
@@ -25,7 +25,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
for server in mediaservers:
|
||||
if server.type == "emby" and server.enabled:
|
||||
self._configs[server.name] = server
|
||||
self._servers[server.name] = Emby(**server.config, sync_libraries=server.sync_libraries)
|
||||
self._instances[server.name] = Emby(**server.config, sync_libraries=server.sync_libraries)
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -38,9 +38,9 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._servers:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
server.reconnect()
|
||||
if not server.get_user():
|
||||
@@ -55,7 +55,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
定时任务,每10分钟调用一次
|
||||
"""
|
||||
# 定时重连
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
logger.info(f"Emby服务器 {name} 连接断开,尝试重连 ...")
|
||||
server.reconnect()
|
||||
@@ -68,7 +68,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
:return: token or None
|
||||
"""
|
||||
# Emby认证
|
||||
for server in self._servers.values():
|
||||
for server in self._instances.values():
|
||||
result = server.authenticate(name, password)
|
||||
if result:
|
||||
return result
|
||||
@@ -87,7 +87,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
server_config: MediaServerConf = self.get_config(source, 'emby')
|
||||
if not server_config:
|
||||
return None
|
||||
server: Emby = self.get_server(source)
|
||||
server: Emby = self.get_instance(source)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_webhook_message(form, args)
|
||||
@@ -95,7 +95,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
for conf in self._configs.values():
|
||||
if conf.type != "emby":
|
||||
continue
|
||||
server = self.get_server(conf.name)
|
||||
server = self.get_instance(conf.name)
|
||||
if server:
|
||||
result = server.get_webhook_message(form, args)
|
||||
if result:
|
||||
@@ -109,7 +109,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
:param itemid: 媒体服务器ItemID
|
||||
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
||||
"""
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if mediainfo.type == MediaType.MOVIE:
|
||||
if itemid:
|
||||
movie = server.get_iteminfo(itemid)
|
||||
@@ -156,12 +156,12 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
媒体数量统计
|
||||
"""
|
||||
if server:
|
||||
server: Emby = self.get_server(server)
|
||||
server: Emby = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
servers = [server]
|
||||
else:
|
||||
servers = self._servers.values()
|
||||
servers = self._instances.values()
|
||||
media_statistics = []
|
||||
for server in servers:
|
||||
media_statistic = server.get_medias_count()
|
||||
@@ -177,7 +177,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库列表
|
||||
"""
|
||||
server: Emby = self.get_server(server)
|
||||
server: Emby = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_librarys(username=username, hidden=hidden)
|
||||
return None
|
||||
@@ -186,7 +186,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库项目列表
|
||||
"""
|
||||
server: Emby = self.get_server(server)
|
||||
server: Emby = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_items(library_id, start_index, limit)
|
||||
return None
|
||||
@@ -195,7 +195,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库项目详情
|
||||
"""
|
||||
server: Emby = self.get_server(server)
|
||||
server: Emby = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_iteminfo(item_id)
|
||||
return None
|
||||
@@ -205,7 +205,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取剧集信息
|
||||
"""
|
||||
server: Emby = self.get_server(server)
|
||||
server: Emby = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
_, seasoninfo = server.get_tv_episodes(item_id=item_id)
|
||||
@@ -221,7 +221,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体服务器正在播放信息
|
||||
"""
|
||||
server: Emby = self.get_server(server)
|
||||
server: Emby = self.get_instance(server)
|
||||
if not server:
|
||||
return []
|
||||
return server.get_resume(num=count, username=username)
|
||||
@@ -230,7 +230,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体库播放地址
|
||||
"""
|
||||
server: Emby = self.get_server(server)
|
||||
server: Emby = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_play_url(item_id)
|
||||
@@ -240,7 +240,7 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体服务器最新入库条目
|
||||
"""
|
||||
server: Emby = self.get_server(server)
|
||||
server: Emby = self.get_instance(server)
|
||||
if not server:
|
||||
return []
|
||||
return server.get_latest(num=count, username=username)
|
||||
|
||||
@@ -17,7 +17,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
初始化模块
|
||||
"""
|
||||
# 读取媒体服务器配置
|
||||
self._servers: Dict[str, Jellyfin] = {}
|
||||
self._instances: Dict[str, Jellyfin] = {}
|
||||
self._configs: Dict[str, MediaServerConf] = {}
|
||||
mediaservers = MediaServerHelper().get_mediaservers()
|
||||
if not mediaservers:
|
||||
@@ -25,7 +25,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
for server in mediaservers:
|
||||
if server.type == "jellyfin" and server.enabled:
|
||||
self._configs[server.name] = server
|
||||
self._servers[server.name] = Jellyfin(**server.config, sync_libraries=server.sync_libraries)
|
||||
self._instances[server.name] = Jellyfin(**server.config, sync_libraries=server.sync_libraries)
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -39,7 +39,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
定时任务,每10分钟调用一次
|
||||
"""
|
||||
# 定时重连
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
logger.info(f"Jellyfin {name} 服务器连接断开,尝试重连 ...")
|
||||
server.reconnect()
|
||||
@@ -51,9 +51,9 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._servers:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
server.reconnect()
|
||||
if not server.get_user():
|
||||
@@ -68,7 +68,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
:return: Token or None
|
||||
"""
|
||||
# Jellyfin认证
|
||||
for server in self._servers.values():
|
||||
for server in self._instances.values():
|
||||
result = server.authenticate(name, password)
|
||||
if result:
|
||||
return result
|
||||
@@ -87,7 +87,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
server_config: MediaServerConf = self.get_config(source, 'jellyfin')
|
||||
if not server_config:
|
||||
return None
|
||||
server: Jellyfin = self.get_server(source)
|
||||
server: Jellyfin = self.get_instance(source)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_webhook_message(body)
|
||||
@@ -95,7 +95,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
for conf in self._configs.values():
|
||||
if conf.type != "jellyfin":
|
||||
continue
|
||||
server = self.get_server(conf.name)
|
||||
server = self.get_instance(conf.name)
|
||||
if server:
|
||||
result = server.get_webhook_message(body)
|
||||
if result:
|
||||
@@ -109,7 +109,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
:param itemid: 媒体服务器ItemID
|
||||
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
||||
"""
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if mediainfo.type == MediaType.MOVIE:
|
||||
if itemid:
|
||||
movie = server.get_iteminfo(itemid)
|
||||
@@ -154,12 +154,12 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
媒体数量统计
|
||||
"""
|
||||
if server:
|
||||
server: Jellyfin = self.get_server(server)
|
||||
server: Jellyfin = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
servers = [server]
|
||||
else:
|
||||
servers = self._servers.values()
|
||||
servers = self._instances.values()
|
||||
media_statistics = []
|
||||
for server in servers:
|
||||
media_statistic = server.get_medias_count()
|
||||
@@ -175,16 +175,17 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库列表
|
||||
"""
|
||||
server: Jellyfin = self.get_server(server)
|
||||
server: Jellyfin = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_librarys(username=username, hidden=hidden)
|
||||
return None
|
||||
|
||||
def mediaserver_items(self, server: str, library_id: str, start_index: int = 0, limit: int = 100) -> Optional[Generator]:
|
||||
def mediaserver_items(self, server: str, library_id: str, start_index: int = 0, limit: int = 100) -> Optional[
|
||||
Generator]:
|
||||
"""
|
||||
媒体库项目列表
|
||||
"""
|
||||
server: Jellyfin = self.get_server(server)
|
||||
server: Jellyfin = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_items(library_id, start_index, limit)
|
||||
return None
|
||||
@@ -193,7 +194,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库项目详情
|
||||
"""
|
||||
server: Jellyfin = self.get_server(server)
|
||||
server: Jellyfin = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_iteminfo(item_id)
|
||||
return None
|
||||
@@ -203,7 +204,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取剧集信息
|
||||
"""
|
||||
server: Jellyfin = self.get_server(server)
|
||||
server: Jellyfin = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
_, seasoninfo = server.get_tv_episodes(item_id=item_id)
|
||||
@@ -219,7 +220,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体服务器正在播放信息
|
||||
"""
|
||||
server: Jellyfin = self.get_server(server)
|
||||
server: Jellyfin = self.get_instance(server)
|
||||
if not server:
|
||||
return []
|
||||
return server.get_resume(num=count, username=username)
|
||||
@@ -228,7 +229,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体库播放地址
|
||||
"""
|
||||
server: Jellyfin = self.get_server(server)
|
||||
server: Jellyfin = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_play_url(item_id)
|
||||
@@ -238,7 +239,7 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体服务器最新入库条目
|
||||
"""
|
||||
server: Jellyfin = self.get_server(server)
|
||||
server: Jellyfin = self.get_instance(server)
|
||||
if not server:
|
||||
return []
|
||||
return server.get_latest(num=count, username=username)
|
||||
|
||||
@@ -17,7 +17,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
初始化模块
|
||||
"""
|
||||
# 读取媒体服务器配置
|
||||
self._servers: Dict[str, Plex] = {}
|
||||
self._instances: Dict[str, Plex] = {}
|
||||
self._configs: Dict[str, MediaServerConf] = {}
|
||||
mediaservers = MediaServerHelper().get_mediaservers()
|
||||
if not mediaservers:
|
||||
@@ -25,7 +25,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
for server in mediaservers:
|
||||
if server.type == "plex" and server.enabled:
|
||||
self._configs[server.name] = server
|
||||
self._servers[server.name] = Plex(**server.config, sync_libraries=server.sync_libraries)
|
||||
self._instances[server.name] = Plex(**server.config, sync_libraries=server.sync_libraries)
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -38,9 +38,9 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._servers:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
server.reconnect()
|
||||
if not server.get_librarys():
|
||||
@@ -55,7 +55,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
定时任务,每10分钟调用一次
|
||||
"""
|
||||
# 定时重连
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
logger.info(f"Plex {name} 服务器连接断开,尝试重连 ...")
|
||||
server.reconnect()
|
||||
@@ -73,7 +73,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
server_config: MediaServerConf = self.get_config(source, 'plex')
|
||||
if not server_config:
|
||||
return None
|
||||
server: Plex = self.get_server(source)
|
||||
server: Plex = self.get_instance(source)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_webhook_message(body)
|
||||
@@ -81,7 +81,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
for conf in self._configs.values():
|
||||
if conf.type != "plex":
|
||||
continue
|
||||
server = self.get_server(conf.name)
|
||||
server = self.get_instance(conf.name)
|
||||
if server:
|
||||
result = server.get_webhook_message(body)
|
||||
if result:
|
||||
@@ -95,7 +95,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
:param itemid: 媒体服务器ItemID
|
||||
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
||||
"""
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if mediainfo.type == MediaType.MOVIE:
|
||||
if itemid:
|
||||
movie = server.get_iteminfo(itemid)
|
||||
@@ -144,12 +144,12 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
媒体数量统计
|
||||
"""
|
||||
if server:
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
servers = [server]
|
||||
else:
|
||||
servers = self._servers.values()
|
||||
servers = self._instances.values()
|
||||
media_statistics = []
|
||||
for server in servers:
|
||||
media_statistic = server.get_medias_count()
|
||||
@@ -163,7 +163,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库列表
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_librarys(hidden)
|
||||
return None
|
||||
@@ -172,7 +172,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库项目列表
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_items(library_id, start_index, limit)
|
||||
return None
|
||||
@@ -181,7 +181,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库项目详情
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_iteminfo(item_id)
|
||||
return None
|
||||
@@ -191,7 +191,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取剧集信息
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
_, seasoninfo = server.get_tv_episodes(item_id=item_id)
|
||||
@@ -206,7 +206,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体服务器正在播放信息
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return []
|
||||
return server.get_resume(num=count)
|
||||
@@ -215,7 +215,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体服务器最新入库条目
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return []
|
||||
return server.get_latest(num=count)
|
||||
@@ -224,7 +224,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体库播放地址
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_play_url(item_id)
|
||||
|
||||
@@ -25,16 +25,16 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
初始化模块
|
||||
"""
|
||||
# 读取下载器配置
|
||||
self._servers: Dict[str, Qbittorrent] = {}
|
||||
downloaders = DownloaderHelper().get_downloaders()
|
||||
if not downloaders:
|
||||
self._instances: Dict[str, Qbittorrent] = {}
|
||||
configs = DownloaderHelper().get_downloader_conf()
|
||||
if not configs:
|
||||
return
|
||||
for server in downloaders:
|
||||
if server.type == "qbittorrent" and server.enabled:
|
||||
self._servers[server.name] = Qbittorrent(**server.config)
|
||||
if server.default:
|
||||
self._default_server_name = server.name
|
||||
self._default_server = self._servers[server.name]
|
||||
for conf in configs:
|
||||
if conf.type == "qbittorrent" and conf.enabled:
|
||||
self._instances[conf.name] = Qbittorrent(**conf.config)
|
||||
if conf.default:
|
||||
self._default_server_name = conf.name
|
||||
self._default_server = self._instances[conf.name]
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -47,9 +47,9 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._servers:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
server.reconnect()
|
||||
if not server.transfer_info():
|
||||
@@ -63,7 +63,7 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
"""
|
||||
定时任务,每10分钟调用一次
|
||||
"""
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
logger.info(f"Qbittorrent下载器 {name} 连接断开,尝试重连 ...")
|
||||
server.reconnect()
|
||||
@@ -103,7 +103,7 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
return None, None, f"种子文件不存在:{content}"
|
||||
|
||||
# 获取下载器
|
||||
server: Qbittorrent = self.get_server(downloader)
|
||||
server: Qbittorrent = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
|
||||
@@ -201,7 +201,7 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
:return: 下载器中符合状态的种子列表
|
||||
"""
|
||||
# 获取下载器
|
||||
server: Qbittorrent = self.get_server(downloader)
|
||||
server: Qbittorrent = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
|
||||
@@ -274,7 +274,7 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
:param downloader: 下载器
|
||||
:param transfer_type: 整理方式
|
||||
"""
|
||||
server: Qbittorrent = self.get_server(downloader)
|
||||
server: Qbittorrent = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
server.set_torrents_tag(ids=hashs, tags=['已整理'])
|
||||
@@ -298,7 +298,7 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
:param downloader: 下载器
|
||||
:return: bool
|
||||
"""
|
||||
server: Qbittorrent = self.get_server(downloader)
|
||||
server: Qbittorrent = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
return server.delete_torrents(delete_file=delete_file, ids=hashs)
|
||||
@@ -311,7 +311,7 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
:param downloader: 下载器
|
||||
:return: bool
|
||||
"""
|
||||
server: Qbittorrent = self.get_server(downloader)
|
||||
server: Qbittorrent = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
return server.start_torrents(ids=hashs)
|
||||
@@ -323,7 +323,7 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
:param downloader: 下载器
|
||||
:return: bool
|
||||
"""
|
||||
server: Qbittorrent = self.get_server(downloader)
|
||||
server: Qbittorrent = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
return server.stop_torrents(ids=hashs)
|
||||
@@ -332,7 +332,7 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
"""
|
||||
获取种子文件列表
|
||||
"""
|
||||
server: Qbittorrent = self.get_server(downloader)
|
||||
server: Qbittorrent = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_files(tid=tid)
|
||||
@@ -342,12 +342,12 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase):
|
||||
下载器信息
|
||||
"""
|
||||
if downloader:
|
||||
server: Qbittorrent = self.get_server(downloader)
|
||||
server: Qbittorrent = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
servers = [server]
|
||||
else:
|
||||
servers = self._servers.values()
|
||||
servers = self._instances.values()
|
||||
# 调用Qbittorrent API查询实时信息
|
||||
ret_info = []
|
||||
for server in servers:
|
||||
|
||||
@@ -21,11 +21,11 @@ class SlackModule(_ModuleBase, _MessageBase):
|
||||
if not clients:
|
||||
return
|
||||
self._configs = {}
|
||||
self._clients = {}
|
||||
self._instances = {}
|
||||
for client in clients:
|
||||
if client.type == "slack" and client.enabled:
|
||||
self._configs[client.name] = client
|
||||
self._clients[client.name] = Slack(**client.config, name=client.name)
|
||||
self._instances[client.name] = Slack(**client.config, name=client.name)
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -35,16 +35,16 @@ class SlackModule(_ModuleBase, _MessageBase):
|
||||
"""
|
||||
停止模块
|
||||
"""
|
||||
for client in self._clients.values():
|
||||
for client in self._instances.values():
|
||||
client.stop()
|
||||
|
||||
def test(self) -> Optional[Tuple[bool, str]]:
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._clients:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, client in self._clients.items():
|
||||
for name, client in self._instances.items():
|
||||
state = client.get_state()
|
||||
if not state:
|
||||
return False, f"Slack {name} 未就续"
|
||||
@@ -223,7 +223,7 @@ class SlackModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
targets = message.targets
|
||||
userid = message.userid
|
||||
@@ -232,7 +232,7 @@ class SlackModule(_ModuleBase, _MessageBase):
|
||||
if not userid:
|
||||
logger.warn(f"用户没有指定 Slack用户ID,消息无法发送")
|
||||
return
|
||||
client: Slack = self.get_client(conf.name)
|
||||
client: Slack = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_msg(title=message.title, text=message.text,
|
||||
image=message.image, userid=userid, link=message.link)
|
||||
@@ -245,9 +245,9 @@ class SlackModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: Slack = self.get_client(conf.name)
|
||||
client: Slack = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_medias_msg(title=message.title, medias=medias, userid=message.userid)
|
||||
|
||||
@@ -259,9 +259,9 @@ class SlackModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: Slack = self.get_client(conf.name)
|
||||
client: Slack = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_torrents_msg(title=message.title, torrents=torrents,
|
||||
userid=message.userid)
|
||||
|
||||
@@ -18,11 +18,11 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
|
||||
if not clients:
|
||||
return
|
||||
self._configs = {}
|
||||
self._clients = {}
|
||||
self._instances = {}
|
||||
for client in clients:
|
||||
if client.type == "synologychat" and client.enabled:
|
||||
self._configs[client.name] = client
|
||||
self._clients[client.name] = SynologyChat(**client.config)
|
||||
self._instances[client.name] = SynologyChat(**client.config)
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -35,9 +35,9 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._clients:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, client in self._clients.items():
|
||||
for name, client in self._instances.items():
|
||||
state = client.get_state()
|
||||
if not state:
|
||||
return False, f"Synology Chat {name} 未就续"
|
||||
@@ -64,7 +64,7 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
|
||||
client_config = self.get_config(source, 'synologychat')
|
||||
if not client_config:
|
||||
return None
|
||||
client: SynologyChat = self.get_client(source)
|
||||
client: SynologyChat = self.get_instance(source)
|
||||
# 解析消息
|
||||
message: dict = form
|
||||
if not message:
|
||||
@@ -94,7 +94,7 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
targets = message.targets
|
||||
userid = message.userid
|
||||
@@ -103,7 +103,7 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
|
||||
if not userid:
|
||||
logger.warn(f"用户没有指定 SynologyChat用户ID,消息无法发送")
|
||||
return
|
||||
client: SynologyChat = self.get_client(conf.name)
|
||||
client: SynologyChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_msg(title=message.title, text=message.text,
|
||||
image=message.image, userid=userid, link=message.link)
|
||||
@@ -116,9 +116,9 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: SynologyChat = self.get_client(conf.name)
|
||||
client: SynologyChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_medias_msg(title=message.title, medias=medias,
|
||||
userid=message.userid)
|
||||
@@ -131,9 +131,9 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: SynologyChat = self.get_client(conf.name)
|
||||
client: SynologyChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_torrents_msg(title=message.title, torrents=torrents,
|
||||
userid=message.userid, link=message.link)
|
||||
|
||||
@@ -20,11 +20,11 @@ class TelegramModule(_ModuleBase, _MessageBase):
|
||||
if not clients:
|
||||
return
|
||||
self._configs = {}
|
||||
self._clients = {}
|
||||
self._instances = {}
|
||||
for client in clients:
|
||||
if client.type == "telegram" and client.enabled:
|
||||
self._configs[client.name] = client
|
||||
self._clients[client.name] = Telegram(**client.config, name=client.name)
|
||||
self._instances[client.name] = Telegram(**client.config, name=client.name)
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -34,16 +34,16 @@ class TelegramModule(_ModuleBase, _MessageBase):
|
||||
"""
|
||||
停止模块
|
||||
"""
|
||||
for client in self._clients.values():
|
||||
for client in self._instances.values():
|
||||
client.stop()
|
||||
|
||||
def test(self) -> Optional[Tuple[bool, str]]:
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._clients:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, client in self._clients.items():
|
||||
for name, client in self._instances.items():
|
||||
state = client.get_state()
|
||||
if not state:
|
||||
return False, f"Telegram {name} 未就续"
|
||||
@@ -92,7 +92,7 @@ class TelegramModule(_ModuleBase, _MessageBase):
|
||||
client_config = self.get_config(source, 'telegram')
|
||||
if not client_config:
|
||||
return None
|
||||
client: Telegram = self.get_client(source)
|
||||
client: Telegram = self.get_instance(source)
|
||||
# 校验token
|
||||
token = args.get("token")
|
||||
if not token or token != settings.API_TOKEN:
|
||||
@@ -136,7 +136,7 @@ class TelegramModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
targets = message.targets
|
||||
userid = message.userid
|
||||
@@ -145,7 +145,7 @@ class TelegramModule(_ModuleBase, _MessageBase):
|
||||
if not userid:
|
||||
logger.warn(f"用户没有指定 Telegram用户ID,消息无法发送")
|
||||
return
|
||||
client: Telegram = self.get_client(conf.name)
|
||||
client: Telegram = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_msg(title=message.title, text=message.text,
|
||||
image=message.image, userid=userid, link=message.link)
|
||||
@@ -158,9 +158,9 @@ class TelegramModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: Telegram = self.get_client(conf.name)
|
||||
client: Telegram = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_medias_msg(title=message.title, medias=medias,
|
||||
userid=message.userid, link=message.link)
|
||||
@@ -173,9 +173,9 @@ class TelegramModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: Telegram = self.get_client(conf.name)
|
||||
client: Telegram = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_torrents_msg(title=message.title, torrents=torrents,
|
||||
userid=message.userid, link=message.link)
|
||||
@@ -185,5 +185,5 @@ class TelegramModule(_ModuleBase, _MessageBase):
|
||||
注册命令,实现这个函数接收系统可用的命令菜单
|
||||
:param commands: 命令字典
|
||||
"""
|
||||
for client in self._clients.values():
|
||||
for client in self._instances.values():
|
||||
client.register_commands(commands)
|
||||
|
||||
@@ -22,16 +22,16 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
|
||||
def init_module(self) -> None:
|
||||
# 读取下载器配置
|
||||
self._servers: Dict[str, Transmission] = {}
|
||||
downloaders = DownloaderHelper().get_downloaders()
|
||||
if not downloaders:
|
||||
self._instances: Dict[str, Transmission] = {}
|
||||
configs = DownloaderHelper().get_downloader_conf()
|
||||
if not configs:
|
||||
return
|
||||
for server in downloaders:
|
||||
if server.type == "transmission" and server.enabled:
|
||||
self._servers[server.name] = Transmission(**server.config)
|
||||
if server.default:
|
||||
self._default_server_name = server.name
|
||||
self._default_server = self._servers[server.name]
|
||||
for conf in configs:
|
||||
if conf.type == "transmission" and conf.enabled:
|
||||
self._instances[conf.name] = Transmission(**conf.config)
|
||||
if conf.default:
|
||||
self._default_server_name = conf.name
|
||||
self._default_server = self._instances[conf.name]
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -44,9 +44,9 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._servers:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
server.reconnect()
|
||||
if not server.transfer_info():
|
||||
@@ -61,7 +61,7 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
定时任务,每10分钟调用一次
|
||||
"""
|
||||
# 定时重连
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
logger.info(f"Transmission下载器 {name} 连接断开,尝试重连 ...")
|
||||
server.reconnect()
|
||||
@@ -100,7 +100,7 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
return None, None, f"种子文件不存在:{content}"
|
||||
|
||||
# 获取下载器
|
||||
server: Transmission = self.get_server(downloader)
|
||||
server: Transmission = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
|
||||
@@ -191,7 +191,7 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
:return: 下载器中符合状态的种子列表
|
||||
"""
|
||||
# 获取下载器
|
||||
server: Transmission = self.get_server(downloader)
|
||||
server: Transmission = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
ret_torrents = []
|
||||
@@ -259,7 +259,7 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
:param transfer_type: 整理方式
|
||||
"""
|
||||
# 获取下载器
|
||||
server: Transmission = self.get_server(downloader)
|
||||
server: Transmission = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
# 获取原标签
|
||||
@@ -291,7 +291,7 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
:return: bool
|
||||
"""
|
||||
# 获取下载器
|
||||
server: Transmission = self.get_server(downloader)
|
||||
server: Transmission = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
return server.delete_torrents(delete_file=delete_file, ids=hashs)
|
||||
@@ -305,7 +305,7 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
:return: bool
|
||||
"""
|
||||
# 获取下载器
|
||||
server: Transmission = self.get_server(downloader)
|
||||
server: Transmission = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
return server.start_torrents(ids=hashs)
|
||||
@@ -319,7 +319,7 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
:return: bool
|
||||
"""
|
||||
# 获取下载器
|
||||
server: Transmission = self.get_server(downloader)
|
||||
server: Transmission = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
return server.start_torrents(ids=hashs)
|
||||
@@ -329,7 +329,7 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
获取种子文件列表
|
||||
"""
|
||||
# 获取下载器
|
||||
server: Transmission = self.get_server(downloader)
|
||||
server: Transmission = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_files(tid=tid)
|
||||
@@ -339,12 +339,12 @@ class TransmissionModule(_ModuleBase, _DownloaderBase):
|
||||
下载器信息
|
||||
"""
|
||||
if downloader:
|
||||
server: Transmission = self.get_server(downloader)
|
||||
server: Transmission = self.get_instance(downloader)
|
||||
if not server:
|
||||
return None
|
||||
servers = [server]
|
||||
else:
|
||||
servers = self._servers.values()
|
||||
servers = self._instances.values()
|
||||
# 调用Qbittorrent API查询实时信息
|
||||
ret_info = []
|
||||
for server in servers:
|
||||
|
||||
@@ -20,11 +20,11 @@ class VoceChatModule(_ModuleBase, _MessageBase):
|
||||
if not clients:
|
||||
return
|
||||
self._configs = {}
|
||||
self._clients = {}
|
||||
self._instances = {}
|
||||
for client in clients:
|
||||
if client.type == "vocechat" and client.enabled:
|
||||
self._configs[client.name] = client
|
||||
self._clients[client.name] = VoceChat(**client.config)
|
||||
self._instances[client.name] = VoceChat(**client.config)
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -37,9 +37,9 @@ class VoceChatModule(_ModuleBase, _MessageBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._clients:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, client in self._clients.items():
|
||||
for name, client in self._instances.items():
|
||||
state = client.get_state()
|
||||
if not state:
|
||||
return False, f"VoceChat {name} 未就续"
|
||||
@@ -122,13 +122,13 @@ class VoceChatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
targets = message.targets
|
||||
userid = message.userid
|
||||
if not message.userid and targets:
|
||||
userid = targets.get('telegram_userid')
|
||||
client: VoceChat = self.get_client(conf.name)
|
||||
client: VoceChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_msg(title=message.title, text=message.text,
|
||||
userid=userid, link=message.link)
|
||||
@@ -141,9 +141,9 @@ class VoceChatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: VoceChat = self.get_client(conf.name)
|
||||
client: VoceChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_msg(title=message.title, userid=message.userid)
|
||||
client.send_medias_msg(title=message.title, medias=medias,
|
||||
@@ -157,7 +157,7 @@ class VoceChatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
targets = message.targets
|
||||
userid = message.userid
|
||||
@@ -166,7 +166,7 @@ class VoceChatModule(_ModuleBase, _MessageBase):
|
||||
if not userid:
|
||||
logger.warn(f"用户没有指定 VoceChat用户ID,消息无法发送")
|
||||
return
|
||||
client: VoceChat = self.get_client(conf.name)
|
||||
client: VoceChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_torrents_msg(title=message.title, torrents=torrents,
|
||||
userid=userid, link=message.link)
|
||||
|
||||
@@ -46,7 +46,7 @@ class WebPushModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
webpush_users = conf.config.get("WEBPUSH_USERNAME") or ""
|
||||
if webpush_users:
|
||||
|
||||
@@ -21,11 +21,11 @@ class WechatModule(_ModuleBase, _MessageBase):
|
||||
if not clients:
|
||||
return
|
||||
self._configs = {}
|
||||
self._clients = {}
|
||||
self._instances = {}
|
||||
for client in clients:
|
||||
if client.type == "wechat" and client.enabled:
|
||||
self._configs[client.name] = client
|
||||
self._clients[client.name] = WeChat(**client.config)
|
||||
self._instances[client.name] = WeChat(**client.config)
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -38,9 +38,9 @@ class WechatModule(_ModuleBase, _MessageBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._clients:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, client in self._clients.items():
|
||||
for name, client in self._instances.items():
|
||||
state = client.get_state()
|
||||
if not state:
|
||||
return False, f"企业微信 {name} 未就续"
|
||||
@@ -67,7 +67,7 @@ class WechatModule(_ModuleBase, _MessageBase):
|
||||
client_config = self.get_config(source, 'wechat')
|
||||
if not client_config:
|
||||
return None
|
||||
client: WeChat = self.get_client(source)
|
||||
client: WeChat = self.get_instance(source)
|
||||
# URL参数
|
||||
sVerifyMsgSig = args.get("msg_signature")
|
||||
sVerifyTimeStamp = args.get("timestamp")
|
||||
@@ -159,7 +159,7 @@ class WechatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
targets = message.targets
|
||||
userid = message.userid
|
||||
@@ -168,7 +168,7 @@ class WechatModule(_ModuleBase, _MessageBase):
|
||||
if not userid:
|
||||
logger.warn(f"用户没有指定 微信用户ID,消息无法发送")
|
||||
return
|
||||
client: WeChat = self.get_client(conf.name)
|
||||
client: WeChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_msg(title=message.title, text=message.text,
|
||||
image=message.image, userid=userid, link=message.link)
|
||||
@@ -181,9 +181,9 @@ class WechatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: WeChat = self.get_client(conf.name)
|
||||
client: WeChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
# 先发送标题
|
||||
client.send_msg(title=message.title, userid=message.userid, link=message.link)
|
||||
@@ -198,9 +198,9 @@ class WechatModule(_ModuleBase, _MessageBase):
|
||||
:return: 成功或失败
|
||||
"""
|
||||
for conf in self._configs.values():
|
||||
if not self.checkMessage(message, conf.name):
|
||||
if not self.check_message(message, conf.name):
|
||||
continue
|
||||
client: WeChat = self.get_client(conf.name)
|
||||
client: WeChat = self.get_instance(conf.name)
|
||||
if client:
|
||||
client.send_torrents_msg(title=message.title, torrents=torrents,
|
||||
userid=message.userid, link=message.link)
|
||||
@@ -210,5 +210,5 @@ class WechatModule(_ModuleBase, _MessageBase):
|
||||
注册命令,实现这个函数接收系统可用的命令菜单
|
||||
:param commands: 命令字典
|
||||
"""
|
||||
for client in self._clients.values():
|
||||
for client in self._instances.values():
|
||||
client.create_menus(commands)
|
||||
|
||||
Reference in New Issue
Block a user