Skip to content

Commit

Permalink
修改数个插件
Browse files Browse the repository at this point in the history
  • Loading branch information
sanshanya committed Nov 8, 2020
1 parent aafad85 commit 2fdadf4
Show file tree
Hide file tree
Showing 13 changed files with 726 additions and 20 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
| setu_mix | 上方两种涩图插件的融合 | 默认添加方法 | 以后默认使用这个插件 |
| hoshino_training | 用于hoshino原装功能的调教 | 慎重启用,查看详情前往https://github.com/zyujs/hoshino_training | |
| Genshin_Impact | pcrbot(×)原神bot(√) | 默认添加方法 | |
| rss | 适用于Hoshino v2的rss订阅插件 | 默认添加方法,详情https://github.com/zyujs/rss | |



Expand Down
3 changes: 2 additions & 1 deletion XCW/hoshino/hoshino/config/__bot__.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
'shifan',#识别番剧
'battle_report',#会战报告生成,需要修改路径
'bot_manager_web',#新版webmanage
#'voiceguess',#猜语音
'voiceguess',#猜语音
#'eclanrank',
'aichat',#需要apikey,用前修改概率
#'QA',#问答功能,下方有集成优化版
Expand Down Expand Up @@ -129,5 +129,6 @@
'pcrsealkiller',#海豹杀手
'setu_mix',#俩涩图插件合二为一
#'hoshino_training',#慎重启用,前往https://github.com/zyujs/hoshino_training查看说明
'rss',#适用于Hoshino v2的rss订阅插件,详情https://github.com/zyujs/rss
'Genshin_Impact',#原神系列
}
2 changes: 1 addition & 1 deletion XCW/hoshino/hoshino/modules/hoshino_training/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Hoshino调教助手

- `functions/chara.py` 角色&卡池自动更新

本模块将在每次hoshino启动时以及每天下午2-3点间某个随机时间自动更新角色数据和卡池数据, 无需任何操作. 请注意本模块会和 [pcrbot/gacha](https://github.com/pcrbot/gacha) 卡池自动更新项目冲突, 如果已安装 `gacha` 项目, 请删除本模块(`functions/chara.py`)避免冲突.
本模块将在每次hoshino启动后以及每4个小时自动更新一次角色数据和卡池数据, 无需任何操作. 请注意本模块会和 [pcrbot/gacha](https://github.com/pcrbot/gacha) 卡池自动更新项目冲突, 如果已安装 `gacha` 项目, 请删除本模块(`functions/chara.py`)避免冲突.

卡池数据来源: <https://api.redive.lolikon.icu/gacha/default_gacha.json>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,6 @@ async def anti_holo(bot: HoshinoBot, ev: CQEvent):
await bot.delete_msg(self_id=ev.self_id, message_id=ev.message_id)

SB_HOLO = module_get('hoshino.modules.groupmaster.anti_holo', 'SB_HOLO')
keyword_replace(SB_HOLO, anti_holo)
keyword_remove(WHITE_LIST)
if SB_HOLO:
keyword_replace(SB_HOLO, anti_holo)
keyword_remove(WHITE_LIST)
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
import os
import re
import json
import hoshino
import nonebot
import aiohttp
import random
import traceback
import csv
from ast import literal_eval

from hoshino.modules.hoshino_training.util.module import *

from hoshino.modules.priconne.chara import Roster, Chara
from hoshino.modules.priconne.gacha.gacha import Gacha

#可以在此加入自定义角色
#需要将头像命名为 icon_unit_[四位数ID]31.png 放置到 res\img\priconne\unit 目录
CUSTOM_CHARA = {
3322: ['陈睿', 'チン エイ', '叔叔', '睿总', '二次元教父'],
}

startup_job = None

data = {
'chara': {},
'gacha': {},
}

pool_name = {
'BL': {'BL', 'bl', 'Bl', 'bL', 'CN', 'cn'},
'TW': {'TW', 'tw', 'so-net', 'sonet'},
'JP': {'JP', 'jp'},
'MIX': {'MIX', 'mix', 'Mix', 'All', 'all', 'ALL'}
}

jp = re.compile(r'[\u3040-\u309F\u30A0-\u30FF]')

#查角色
class NewRoster(Roster):

def __init__(self):
super(NewRoster, self).__init__()
self.update()

def update(self):
super(NewRoster, self).update()
if 'chara' in data:
for idx, names in data['chara'].items():
for name in names:
name = hoshino.util.normalize_str(name)
if name not in self._roster:
self._roster[name] = idx
self._all_name_list = self._roster.keys()

#角色信息
class NewChara(Chara):

def __init__(self, id_, star=0, equip=0):
super(NewChara, self).__init__(id_, star, equip)

@property
def name(self):
name = super(NewChara, self).name
if name == '未知角色' and self.id in data['chara']:
name = data['chara'][self.id][0]
if jp.search(name) and len(data['chara'][self.id]) > 1:
name = data['chara'][self.id][1]
return name

#抽卡
class NewGacha(Gacha):

def __init__(self, pool_name:str = "MIX"):
super(NewGacha, self).__init__(pool_name)

def load_pool(self, pool_name:str):
super(NewGacha, self).load_pool(pool_name)
if 'gacha' in data and 'chara' in data and pool_name in data['gacha']:
pool = data['gacha'][pool_name]
self.up_prob = pool["up_prob"]
self.s3_prob = pool["s3_prob"]
self.s2_prob = pool["s2_prob"]
self.s1_prob = 1000 - self.s2_prob - self.s3_prob
self.up = pool["up"]
self.star3 = pool["star3"]
self.star2 = pool["star2"]
self.star1 = pool["star1"]

async def query_data(url, is_json = False):
try:
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
if is_json:
data = await resp.json()
else:
data = await resp.text()
except:
traceback.print_exc()
return None
return data

def save_data():
path = os.path.join(os.path.dirname(__file__), 'chara.json')
try:
with open(path, 'w', encoding='utf8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
except:
traceback.print_exc()

def load_data():
path = os.path.join(os.path.dirname(__file__), 'chara.json')
if not os.path.exists(path):
return
try:
with open(path, encoding='utf8') as f:
d = json.load(f)
if 'gacha' in d:
data['gacha'] = d['gacha']
if 'chara' in d:
data['chara'] = {}
for k, v in d['chara'].items():
data['chara'][int(k)] = v
except:
traceback.print_exc()

def ids_to_names(id_list):
name_list = []
for id_ in id_list:
chara = NewChara(id_)
name_list.append(chara.name)
return name_list

async def update_data():

#pcrbot/pcr-nickname
csv_data = await query_data('https://raw.fastgit.org/pcrbot/pcr-nickname/master/nicknames.csv')
if csv_data:
reader = csv.reader(csv_data.strip().split('\n'))
for row in reader:
if row[0].isdigit():
row[1], row[2] = row[2], row[1]
data['chara'][int(row[0])] = row[1:]

#unitdata.py
chara_data = await query_data('https://api.redive.lolikon.icu/gacha/unitdata.py')
if chara_data:
chara_data = chara_data.replace('CHARA_NAME = ', '')
try:
chara_data = literal_eval(chara_data)
except:
chara_data = {}
for k, v in chara_data.items():
if k in data['chara']:
for sv in v:
if sv not in data['chara'][k]:
data['chara'][k].append(sv)
else:
data['chara'][k] = v

#加入自定义角色
for k, v in CUSTOM_CHARA.items():
if k not in data['chara']:
data['chara'][k] = v

#update roster
new_roster.update()

#抽卡
gacha_data = await query_data('https://api.redive.lolikon.icu/gacha/default_gacha.json', True)
if chara_data:
for k, v in gacha_data.items():
if 'up' in v:
v['up'] = ids_to_names(v['up'])
if 'star1' in v:
v['star1'] = ids_to_names(v['star1'])
if 'star2' in v:
v['star2'] = ids_to_names(v['star2'])
if 'star3' in v:
v['star3'] = ids_to_names(v['star3'])
if k in pool_name['JP']:
data['gacha']['JP'] = v
elif k in pool_name['TW']:
data['gacha']['TW'] = v
elif k in pool_name['BL']:
data['gacha']['BL'] = v
#ALL池不使用

save_data()

async def check_pool_update():
global startup_job
if startup_job:
startup_job.remove()
startup_job = None
await update_data()

load_data()

new_roster = NewRoster()

module_replace('hoshino.modules.priconne.chara', 'roster', new_roster)
module_replace('hoshino.modules.priconne.chara', 'Chara', NewChara)
module_replace('hoshino.modules.priconne.gacha', 'Gacha', NewGacha)

startup_job = nonebot.scheduler.add_job(check_pool_update, 'interval', seconds=5)
nonebot.scheduler.add_job(check_pool_update, 'interval', hours=4)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from hoshino.modules.hoshino_training.util.scheduler import *

scheduler_remove('hoshino.modules.priconne.news:bili_news_poller')
scheduler_remove('hoshino.modules.priconne.news:sonet_news_poller')
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# hoshino\util\__init__.py
from hoshino.modules.hoshino_training.util.module import *

async def silence(ev, ban_time, skip_su=True):
pass

module_replace('hoshino.modules.priconne.gacha', 'silence', silence)
46 changes: 46 additions & 0 deletions XCW/hoshino/hoshino/modules/rss/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# rss

适用于Hoshino v2的rss订阅插件

项目地址 https://github.com/zyujs/rss

## 安装方法:

1. 在HoshinoBot的插件目录modules下clone本项目 `git clone https://github.com/zyujs/rss.git`
1.`config/__bot__.py`的模块列表里加入 `rss`
1. 进入本项目根目录,执行 `pip3 install -r requirements.txt` 安装依赖
1. 重启HoshinoBot

默认订阅公主连结b站官方号动态, 请使用指令自行添加/删除关注项.

可以修改插件运行后生成的 `data.json` 文件的 `rsshub` 项自定义rsshub服务器地址.

## 指令列表 :

- `rss help` : 查看帮助
- `rss add rss地址` : 添加rss订阅,需使用完整rss订阅网址.
- `rss addb up主id``rss add-bilibili up主id` : 添加b站up主订阅
- `rss addr route``rss add-route route` : 添加rsshub route订阅, route请查询rsshub文档.
- `rss list` : 查看订阅列表
- `rss rm 序号``rss remove 序号` : 删除订阅列表指定项
- `rss mode 模式id` : 设置推送消息模式 0=标准模式(默认),推送消息包含详情及图片 1=简略模式,推送消息仅包含标题

例:
```
rss addr /pcr/news #订阅pcr日服官网新闻
rss addr /pcr/news-cn #订阅pcr国服官网新闻
rss addr /pcr/news-tw #订阅pcr台服官网新闻
rss addb 14454663 #订阅席巴鸽b站动态
rss add https://www.zhihu.com/rss #订阅知乎每日精选
rss list #查看订阅列表
rss remove 0 #删除订阅列表中第1条订阅
rss mode 0 #设置推送消息模式为标准模式
```

## 鸣谢

- @[地河君](https://github.com/Chendihe4975) : 本项目使用 [地河云](https://michikawachin.art/)[RSSHub](https://rsshub.di.he.cn/) 服务作为默认rsshub服务器, 地河喵kkp!

## 许可

本插件以GPL-v3协议开源
2 changes: 2 additions & 0 deletions XCW/hoshino/hoshino/modules/rss/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
feedparser~=5.2
pillow~=6.2
Loading

0 comments on commit 2fdadf4

Please sign in to comment.