feat: Auto follow ups with dynamic push enabled support
This commit is contained in:
+38
-1
@@ -10,12 +10,13 @@ from loguru import logger
|
|||||||
from .datasource import DataSource
|
from .datasource import DataSource
|
||||||
from .dynamic import dynamic_spider
|
from .dynamic import dynamic_spider
|
||||||
from .server import http_init
|
from .server import http_init
|
||||||
|
from .user import User, RelationType
|
||||||
from ..exception import LiveException
|
from ..exception import LiveException
|
||||||
from ..exception.DataSourceException import DataSourceException
|
from ..exception.DataSourceException import DataSourceException
|
||||||
from ..exception.RedisException import RedisException
|
from ..exception.RedisException import RedisException
|
||||||
from ..utils import redis, config
|
from ..utils import redis, config
|
||||||
from ..utils.network import request
|
from ..utils.network import request
|
||||||
from ..utils.utils import split_list
|
from ..utils.utils import split_list, get_credential
|
||||||
|
|
||||||
|
|
||||||
class StarBot:
|
class StarBot:
|
||||||
@@ -131,6 +132,42 @@ class StarBot:
|
|||||||
saya.require(custom_commands)
|
saya.require(custom_commands)
|
||||||
logger.success("用户自定义命令模块载入完毕")
|
logger.success("用户自定义命令模块载入完毕")
|
||||||
|
|
||||||
|
# 自动关注打开了动态推送的未关注 UP 主
|
||||||
|
if config.get("AUTO_FOLLOW_OPENED_DYNAMIC_UPDATE_UP"):
|
||||||
|
if config.get("ACCOUNT_UID") is None:
|
||||||
|
logger.warning("未填写 ACCOUNT_UID 配置项, 无法自动关注打开了动态推送的未关注 UP 主, "
|
||||||
|
"请使用 config.set('ACCOUNT_UID', 您的UID) 设置, 或手动关注所有需要动态推送的 UP 主, "
|
||||||
|
"否则无法获取未关注用户的动态更新信息, "
|
||||||
|
"使用 config.set('AUTO_FOLLOW_OPENED_DYNAMIC_UPDATE_UP', False) 可禁用自动关注功能和此警告")
|
||||||
|
return
|
||||||
|
|
||||||
|
uid = int(config.get("ACCOUNT_UID"))
|
||||||
|
me = User(uid, get_credential())
|
||||||
|
follows = set()
|
||||||
|
page = 1
|
||||||
|
while True:
|
||||||
|
res = await me.get_followings(page)
|
||||||
|
follows = follows.union(set(map(lambda x: x["mid"], res["list"])))
|
||||||
|
if len(res["list"]) < 20:
|
||||||
|
break
|
||||||
|
page += 1
|
||||||
|
|
||||||
|
need_follow_uids = set()
|
||||||
|
for up in self.__datasource.get_up_list():
|
||||||
|
if any(map(lambda d: d.enabled, map(lambda t: t.dynamic_update, up.targets))):
|
||||||
|
need_follow_uids.add(up.uid)
|
||||||
|
need_follow_uids.difference_update(follows)
|
||||||
|
|
||||||
|
async def follow_task(uid_set):
|
||||||
|
logger.info(f"检测到 {len(uid_set)} 个打开了动态推送但未关注的 UP 主, 启动自动关注任务")
|
||||||
|
for u in uid_set:
|
||||||
|
follow_user = User(u, get_credential())
|
||||||
|
await follow_user.modify_relation(RelationType.SUBSCRIBE)
|
||||||
|
await asyncio.sleep(10)
|
||||||
|
logger.success(f"已成功关注了 {len(uid_set)} 个 UP 主")
|
||||||
|
|
||||||
|
asyncio.create_task(follow_task(need_follow_uids))
|
||||||
|
|
||||||
# 启动消息推送模块
|
# 启动消息推送模块
|
||||||
Ariadne.options["default_account"] = self.__datasource.bots[0].qq
|
Ariadne.options["default_account"] = self.__datasource.bots[0].qq
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,11 @@ SIMPLE_CONFIG = {
|
|||||||
"BILI_JCT": None,
|
"BILI_JCT": None,
|
||||||
"BUVID3": None,
|
"BUVID3": None,
|
||||||
|
|
||||||
|
# 以上 Cookie 数据所对应的 B 站账号 UID,自动关注打开了动态推送但没有关注的用户时使用
|
||||||
|
"ACCOUNT_UID": None,
|
||||||
|
# 是否自动关注打开了动态推送但没有关注的用户,推荐打开,否则无法获取未关注用户的动态更新信息
|
||||||
|
"AUTO_FOLLOW_OPENED_DYNAMIC_UPDATE_UP": True,
|
||||||
|
|
||||||
# 是否将日志同时输出到文件中
|
# 是否将日志同时输出到文件中
|
||||||
"LOG_TO_FILE": False,
|
"LOG_TO_FILE": False,
|
||||||
|
|
||||||
@@ -138,6 +143,11 @@ FULL_CONFIG = {
|
|||||||
"BILI_JCT": None,
|
"BILI_JCT": None,
|
||||||
"BUVID3": None,
|
"BUVID3": None,
|
||||||
|
|
||||||
|
# 以上 Cookie 数据所对应的 B 站账号 UID,自动关注打开了动态推送但没有关注的用户时使用
|
||||||
|
"ACCOUNT_UID": None,
|
||||||
|
# 是否自动关注打开了动态推送但没有关注的用户,推荐打开,否则无法获取未关注用户的动态更新信息
|
||||||
|
"AUTO_FOLLOW_OPENED_DYNAMIC_UPDATE_UP": True,
|
||||||
|
|
||||||
# 是否将日志同时输出到文件中
|
# 是否将日志同时输出到文件中
|
||||||
"LOG_TO_FILE": False,
|
"LOG_TO_FILE": False,
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user