Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

添加每日观看大于等于20级的配置选项,默认关闭 #207

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
assert users["DANMAKU_CD"] >= 0, "DANMAKU_CD参数错误"
assert users["WATCHINGLIVE"] >= 0, "WATCHINGLIVE参数错误"
assert users["WEARMEDAL"] in [0, 1], "WEARMEDAL参数错误"
assert users.get("WATCHINGALL", 0) in [0, 1], "WATCHINGALL参数错误"
config = {
"ASYNC": users["ASYNC"],
"LIKE_CD": users["LIKE_CD"],
Expand All @@ -40,6 +41,7 @@
"WEARMEDAL": users["WEARMEDAL"],
"SIGNINGROUP": users.get("SIGNINGROUP", 2),
"PROXY": users.get("PROXY"),
"WATCHINGALL": users.get("WATCHINGALL", 0),
}
except Exception as e:
log.error(f"读取配置文件失败,请检查配置文件格式是否正确: {e}")
Expand Down
32 changes: 26 additions & 6 deletions src/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def __init__(self, access_token: str, whiteUIDs: str = '', bannedUIDs: str = '',
self.config = config
self.medals = [] # 用户所有勋章
self.medalsNeedDo = [] # 用户所有勋章,等级小于20的 未满1500的
self.medalsOthers = [] # 剩余勋章,仅观看直播

self.session = ClientSession(timeout=ClientTimeout(total=3), trust_env = True)
self.api = BiliApi(self, self.session)
Expand Down Expand Up @@ -83,6 +84,7 @@ async def getMedals(self):
"""
self.medals.clear()
self.medalsNeedDo.clear()
self.medalsOthers.clear()
async for medal in self.api.getFansMedalandRoomID():
if self.whiteList == [0]:
if medal['medal']['target_id'] in self.bannedList:
Expand All @@ -95,8 +97,9 @@ async def getMedals(self):
self.log.success(f"{medal['anchor_info']['nick_name']} 在白名单中,加入任务")
[
self.medalsNeedDo.append(medal)
for medal in self.medals
if medal['medal']['level'] < 20 and medal['medal']['today_feed'] < 1500
else self.medalsOthers.append(medal)
for medal in self.medals
]

async def like_v3(self, failedMedals: list = []):
Expand Down Expand Up @@ -204,11 +207,14 @@ async def sendmsg(self):
return self.message + self.errmsg
await self.getMedals()
nameList1, nameList2, nameList3, nameList4 = [], [], [], []
unlightList = []
for medal in self.medals:
if medal['medal']['level'] >= 20:
continue
today_feed = medal['medal']['today_feed']
nick_name = medal['anchor_info']['nick_name']
if not medal['medal']['is_lighted']:
unlightList.append(nick_name)
if medal['medal']['level'] >= 20:
continue
if today_feed >= 1500:
nameList1.append(nick_name)
elif 1200 <= today_feed < 1500:
Expand All @@ -217,11 +223,11 @@ async def sendmsg(self):
nameList3.append(nick_name)
elif today_feed < 300:
nameList4.append(nick_name)
self.message.append(f"【{self.name}】 今日亲密度获取情况如下(20级以下):")
self.message.append(f"【{self.name}】 今日亲密度获取情况如下:")

for l, n in zip(
[nameList1, nameList2, nameList3, nameList4],
["【1500】", "【1200至1500】", "【300至1200】", "【300以下】"],
[nameList1, nameList2, nameList3, nameList4, unlightList],
["【1500】", "【1200至1500】", "【300至1200】", "【300以下】", "【未点亮】"],
):
if len(l) > 0:
self.message.append(f"{n}" + ' '.join(l[:5]) + f"{'等' if len(l) > 5 else ''}" + f' {len(l)}个')
Expand Down Expand Up @@ -250,6 +256,7 @@ async def watchinglive(self):
return
HEART_MAX = self.config['WATCHINGLIVE']
self.log.log("INFO", f"每日{HEART_MAX}分钟任务开始")
self.log.log("INFO", f"预计共需运行{HEART_MAX*len(self.medalsNeedDo)+5*self.config['WATCHINGALL']*len(self.medalsOthers)}分钟")
n = 0
for medal in self.medalsNeedDo:
n += 1
Expand All @@ -264,6 +271,19 @@ async def watchinglive(self):
)
await asyncio.sleep(60)
self.log.log("SUCCESS", f"每日{HEART_MAX}分钟任务完成")
if not self.config['WATCHINGALL']:
self.log.log("INFO", "大于等于20级每日观看直播任务关闭")
return
n = 0
for medal in self.medalsOthers:
n += 1
for heartNum in range(5):
tasks = []
tasks.append(self.api.heartbeat(medal['room_info']['room_id'], medal['medal']['target_id']))
await asyncio.gather(*tasks)
await asyncio.sleep(60)
self.log.log("INFO",f"{medal['anchor_info']['nick_name']} 5次心跳包已发送({n}/{len(self.medalsOthers)})")
self.log.log("SUCCESS", f"大于等于20级每日观看任务完成")

async def signInGroups(self):
if not self.config['SIGNINGROUP']:
Expand Down
3 changes: 3 additions & 0 deletions users.example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ DANMAKU_CD: 6 # 弹幕间隔时间,单位秒,默认6秒,设置为0则不发弹
WATCHINGLIVE: 25 # 每日每直播间观看时长,单位 min ,设置为0则关闭, 默认 25 分钟
# 总观看时长为未满20级牌子数*每直播间观看时长

WATCHINGALL: 0 # 是否观看大于等于20级牌子直播间,来保持粉丝牌持续点亮状态,默认关闭,设置为1则开启
# 所需观看时长为大于等于20级牌子数*5分钟,关闭时大于等于20级粉丝牌会每点亮3天熄灭1天

WEARMEDAL: 0 # 是否弹幕打卡时自动带上当前房间的粉丝牌,避免房间有粉丝牌等级禁言,默认关闭,设置为1则开启

SIGNINGROUP: 0 # 应援团签到CD时间,单位秒,默认2秒,设置为0则不签到
Expand Down