mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-03 19:00:00 +08:00
first_commit .gitignore
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
from .alc import get_almanac_base64_str, load_data
|
||||
import os
|
||||
from util.utils import get_bot, scheduler
|
||||
from nonebot import on_command
|
||||
from models.level_user import LevelUser
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.adapters.cqhttp import Bot, GroupMessageEvent
|
||||
from util.init_result import image
|
||||
from services.log import logger
|
||||
from models.group_remind import GroupRemind
|
||||
|
||||
FILE_PATH = os.path.dirname(__file__)
|
||||
|
||||
almanac = on_command('原神黄历', priority=5, block=True)
|
||||
reload = on_command('重载原神黄历数据', priority=5, block=True)
|
||||
|
||||
|
||||
@almanac.handle()
|
||||
async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
|
||||
almanac_base64 = get_almanac_base64_str()
|
||||
mes = image(b64=almanac_base64) + "\n ※ 黄历数据来源于 genshin.pub"
|
||||
await almanac.send(mes)
|
||||
logger.info(
|
||||
f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})"
|
||||
f" 发送查看原神黄历")
|
||||
|
||||
|
||||
@reload.handle()
|
||||
async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
|
||||
if await LevelUser.check_level(event.user_id, event.group_id, 5):
|
||||
load_data()
|
||||
await reload.send("重载成功")
|
||||
|
||||
|
||||
@scheduler.scheduled_job(
|
||||
'cron',
|
||||
hour=10,
|
||||
minute=25,
|
||||
)
|
||||
async def _():
|
||||
# 每日提醒
|
||||
bot = get_bot()
|
||||
gl = await bot.get_group_list(self_id=bot.self_id)
|
||||
gl = [g['group_id'] for g in gl]
|
||||
almanac_base64 = get_almanac_base64_str()
|
||||
mes = image(b64=almanac_base64) + "\n ※ 黄历数据来源于 genshin.pub"
|
||||
for gid in gl:
|
||||
if await GroupRemind.get_status(gid, 'almanac'):
|
||||
await bot.send_group_msg(group_id=int(gid), message=mes)
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,123 @@
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
from io import BytesIO
|
||||
|
||||
import os
|
||||
import json
|
||||
import random
|
||||
import base64
|
||||
import time
|
||||
|
||||
FILE_PATH = os.path.dirname(__file__)
|
||||
FONT_PATH = os.path.join(FILE_PATH, "汉仪文黑.ttf")
|
||||
|
||||
data = {} # configs.json里的数据
|
||||
|
||||
almanac_data = {
|
||||
# 生成的黄历base64字符串和黄历更新日期
|
||||
"date": "",
|
||||
"almanac_base64_str": ""
|
||||
}
|
||||
|
||||
chinese = {"0": "", "1": "一", "2": "二", "3": "三", "4": "四", "5": "五", "6": "六", "7": "七", "8": "八", "9": "九"}
|
||||
|
||||
|
||||
def month_to_chinese(month: str):
|
||||
# 把日期数字转成中文数字
|
||||
m = int(month)
|
||||
if m < 10:
|
||||
return chinese[month[-1]]
|
||||
elif m < 20:
|
||||
return "十" + chinese[month[-1]]
|
||||
else:
|
||||
return chinese[month[0]] + "十" + chinese[month[-1]]
|
||||
|
||||
|
||||
def load_data():
|
||||
# 载入config.json文件的数据
|
||||
global data
|
||||
with open(os.path.join(FILE_PATH, 'config.json'), 'r', encoding='UTF-8') as f:
|
||||
data = json.load(f)
|
||||
|
||||
almanac_data["date"] = ""
|
||||
almanac_data["almanac_base64_str"] = ""
|
||||
|
||||
|
||||
load_data()
|
||||
|
||||
|
||||
def seed_random_list(seed: str, l: list):
|
||||
# 使用随机种子随机选择列表中的元素,相同的种子和列表将返回同样的输出
|
||||
seed = seed + str(l)
|
||||
random.seed(seed)
|
||||
index = random.random() * len(l)
|
||||
return l[int(index)]
|
||||
|
||||
|
||||
def generate_almanac():
|
||||
# 生成黄历图片,然后转换成base64保存到 almanac_data["almanac_base64_str"]
|
||||
|
||||
seed = time.strftime("%Y-%m-%d")
|
||||
offset = 1
|
||||
today_luck = []
|
||||
l = list(data.keys())
|
||||
|
||||
while len(today_luck) < 6:
|
||||
# 随机6个不同的运势放到 today_luck
|
||||
r = seed_random_list(str(offset) + seed, l)
|
||||
if r in today_luck:
|
||||
offset += 1
|
||||
else:
|
||||
today_luck.append(r)
|
||||
|
||||
back = Image.open(os.path.join(FILE_PATH, "back.png"))
|
||||
|
||||
year = time.strftime("%Y")
|
||||
month = month_to_chinese(time.strftime("%m")) + "月"
|
||||
day = month_to_chinese(time.strftime("%d")) + "日"
|
||||
|
||||
draw = ImageDraw.Draw(back)
|
||||
draw.text((118, 165), year, fill="#8d7650ff", font=ImageFont.truetype(FONT_PATH, size=30), anchor="mm",
|
||||
align="center")
|
||||
draw.text((260, 165), day, fill="#f7f8f2ff", font=ImageFont.truetype(FONT_PATH, size=35), anchor="mm",
|
||||
align="center")
|
||||
draw.text((410, 165), month, fill="#8d7650ff", font=ImageFont.truetype(FONT_PATH, size=30), anchor="mm",
|
||||
align="center")
|
||||
|
||||
buff = Image.new("RGBA", (325, 160))
|
||||
debuff = Image.new("RGBA", (325, 160))
|
||||
|
||||
buff_draw = ImageDraw.Draw(buff)
|
||||
debuff_draw = ImageDraw.Draw(debuff)
|
||||
|
||||
for i in range(3):
|
||||
buff_name = today_luck[i]
|
||||
debuff_name = today_luck[(i + 3)]
|
||||
|
||||
buff_effect = seed_random_list(seed, data[buff_name]["buff"])
|
||||
debuff_effect = seed_random_list(seed, data[debuff_name]["debuff"])
|
||||
|
||||
buff_draw.text((0, i * 53), buff_name, fill="#756141ff", font=ImageFont.truetype(FONT_PATH, size=25))
|
||||
debuff_draw.text((0, i * 53), debuff_name, fill="#756141ff", font=ImageFont.truetype(FONT_PATH, size=25))
|
||||
|
||||
buff_draw.text((0, i * 53 + 28), buff_effect, fill="#b5b3acff", font=ImageFont.truetype(FONT_PATH, size=19))
|
||||
debuff_draw.text((0, i * 53 + 28), debuff_effect, fill="#b5b3acff", font=ImageFont.truetype(FONT_PATH, size=19))
|
||||
|
||||
back.paste(buff, (150, 230), buff)
|
||||
back.paste(debuff, (150, 400), debuff)
|
||||
|
||||
bio = BytesIO()
|
||||
back.save(bio, format='PNG')
|
||||
base64_str = base64.b64encode(bio.getvalue()).decode()
|
||||
|
||||
almanac_data["date"] = time.strftime("%Y-%m-%d")
|
||||
almanac_data["almanac_base64_str"] = 'base64://' + base64_str
|
||||
|
||||
|
||||
def get_almanac_base64_str():
|
||||
# if almanac_data["date"] == time.strftime("%Y-%m-%d"):
|
||||
# return almanac_data["almanac_base64_str"]
|
||||
# else:
|
||||
# generate_almanac()
|
||||
# return almanac_data["almanac_base64_str"]
|
||||
generate_almanac()
|
||||
return almanac_data["almanac_base64_str"]
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"抽卡":{
|
||||
"buff": ["欧气满满,十连出金","出金不歪"],
|
||||
"debuff": ["武器大师","保底出金","金色会是痛苦大剑"]
|
||||
},
|
||||
"刷世界boss":{
|
||||
"buff": ["双攻双爆角斗士"],
|
||||
"debuff": ["只有保底材料","贪生怕死角斗士"]
|
||||
},
|
||||
"刷风本":{
|
||||
"buff": ["会有极品猎人套","会掉真正的少女心","治疗加成少女头"],
|
||||
"debuff": ["勇往直前少女心","少女飘摇的杀意","少女暴怒的容颜"]
|
||||
},
|
||||
"刷火本":{
|
||||
"buff": ["魔女帽子火伤杯","暴伤魔女帽!","火伤魔女心!"],
|
||||
"debuff": ["幡 然 醒 悟","这么阴间的地方真的会有魔女套吗?","不务正业火魔女","会匹配到3个卢姥爷"]
|
||||
},
|
||||
"刷岩本":{
|
||||
"buff": ["悠久的磐岩伴你左右","岩神的庇护常在"],
|
||||
"debuff": ["防御流星杯,你值得拥有"]
|
||||
},
|
||||
"刷宗室":{
|
||||
"buff": ["物理伤害骑士道,元素精通宗室套"],
|
||||
"debuff": ["贪生怕死骑士道,物理伤害宗室杯"]
|
||||
},
|
||||
"刷冰本":{
|
||||
"buff": ["双暴词条概率up"],
|
||||
"debuff": ["防御力船帽,无人可及"]
|
||||
},
|
||||
"刷雷本":{
|
||||
"buff": ["愿雷鸟伴你左右"],
|
||||
"debuff": ["来表演一个只掉平雷套的绝活","风神忽悠雷凶兆"]
|
||||
},
|
||||
"锄大地":{
|
||||
"buff": ["会掉一大堆紫色材料"],
|
||||
"debuff": ["深渊法师爱你哟","会被冰水法控到死"]
|
||||
},
|
||||
"挖矿":{
|
||||
"buff": ["开矿出双材料"],
|
||||
"debuff": ["去别人世界会被拒"]
|
||||
},
|
||||
"刷天赋本":{
|
||||
"buff": ["金色!我看到了金色的书!"],
|
||||
"debuff": ["2蓝2绿不会变"]
|
||||
},
|
||||
"刷突破材料":{
|
||||
"buff": ["金色!我看到了金色的材料!"],
|
||||
"debuff": ["2蓝2绿不会变"]
|
||||
},
|
||||
"升级圣遗物":{
|
||||
"buff": ["稀有词条跳跳跳","会双爆拉满"],
|
||||
"debuff": ["女 仆 狂 喜","无中生有防御力","生命拉满","完美避开双爆"]
|
||||
},
|
||||
"打风魔龙":{
|
||||
"buff": ["看我一箭一个风魔鸡","今天特瓦林可以给想要的突破材料","5金加原胚!"],
|
||||
"debuff": ["会不小心掉下平台","不小心被地板烫死了"]
|
||||
},
|
||||
"打狼王":{
|
||||
"buff": ["今天安德琉斯的心情不错,可以py一下","5金加原胚!"],
|
||||
"debuff": ["狼尾巴*1"]
|
||||
},
|
||||
"打公子":{
|
||||
"buff": ["今天可以和公子py想要的突破材料","5金加原胚!"],
|
||||
"debuff": ["要角没有!要命一条!"]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user