mirror of
https://github.com/ClovertaTheTrilobita/SanYeCao-Nonebot.git
synced 2026-04-01 22:04:51 +00:00
feat(plugins): 添加绝对色感游戏并优化图片处理
- 新增绝对色感游戏插件,包含颜色生成和猜测逻辑 - 重构部分插件,使用异步函数处理网络请求和图片生成 - 优化图片下载和删除操作,提高代码复用性- 更新命令列表和菜单显示,增加新功能入口
This commit is contained in:
parent
3b96de2a91
commit
7eb40ad582
17 changed files with 189 additions and 57 deletions
101
src/clover_image/color_sensitive_game.py
Normal file
101
src/clover_image/color_sensitive_game.py
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
import random
|
||||||
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
|
|
||||||
|
async def generate_diff_color(base_color, level):
|
||||||
|
"""生成差异颜色"""
|
||||||
|
factor = 1.1
|
||||||
|
if level == 2:
|
||||||
|
factor = 1.08
|
||||||
|
elif level == 3:
|
||||||
|
factor = 1.05
|
||||||
|
elif level == 4:
|
||||||
|
factor = 1.02
|
||||||
|
|
||||||
|
new_color = [
|
||||||
|
min(255, max(0, int(c * factor)))
|
||||||
|
for c in base_color
|
||||||
|
]
|
||||||
|
return tuple(new_color)
|
||||||
|
|
||||||
|
|
||||||
|
async def generate_base_color():
|
||||||
|
"""生成基础颜色"""
|
||||||
|
return (
|
||||||
|
random.randint(0, 255),
|
||||||
|
random.randint(0, 255),
|
||||||
|
random.randint(0, 255)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# 原类方法转换为独立函数
|
||||||
|
async def init_game_state(level_decision):
|
||||||
|
"""初始化"""
|
||||||
|
level = 1 if level_decision == "初级" else 2 if level_decision == "中级" else 3 if level_decision == "高级" else 4
|
||||||
|
size = 3 if level == 1 else 5 if level == 2 else 7 if level == 3 else 9
|
||||||
|
|
||||||
|
return {
|
||||||
|
"level": level,
|
||||||
|
"size": size,
|
||||||
|
"cell_size": 50,
|
||||||
|
"base_color": await generate_base_color(),
|
||||||
|
"diff_color": None,
|
||||||
|
"target_row": None,
|
||||||
|
"target_col": None
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async def generate_new_level(state):
|
||||||
|
"""生成新关卡(替代generate_new_level方法)"""
|
||||||
|
state["base_color"] = await generate_base_color()
|
||||||
|
state["diff_color"] = await generate_diff_color(state["base_color"], state["level"])
|
||||||
|
state["target_row"] = random.randint(0, state["size"] - 1)
|
||||||
|
state["target_col"] = random.randint(0, state["size"] - 1)
|
||||||
|
return state
|
||||||
|
|
||||||
|
|
||||||
|
async def create_image(state, image_path):
|
||||||
|
"""创建图片"""
|
||||||
|
# 计算画布尺寸
|
||||||
|
image_width = state["size"] * state["cell_size"]
|
||||||
|
image_height = state["size"] * state["cell_size"]
|
||||||
|
|
||||||
|
image = Image.new("RGB", (image_width, image_height), "white")
|
||||||
|
draw = ImageDraw.Draw(image)
|
||||||
|
|
||||||
|
for row in range(state["size"]):
|
||||||
|
for col in range(state["size"]):
|
||||||
|
x1 = col * state["cell_size"]
|
||||||
|
y1 = row * state["cell_size"]
|
||||||
|
x2 = x1 + state["cell_size"]
|
||||||
|
y2 = y1 + state["cell_size"]
|
||||||
|
|
||||||
|
color = state["diff_color"] if (row == state["target_row"] and col == state["target_col"]) else state["base_color"]
|
||||||
|
draw.rectangle([x1, y1, x2, y2], fill=color)
|
||||||
|
|
||||||
|
image.save(image_path)
|
||||||
|
return [image_path, state["target_row"], state["target_col"]]
|
||||||
|
|
||||||
|
|
||||||
|
# 示例:在插件中组合使用这些函数
|
||||||
|
async def game_flow(level_decision: str, file_path: str):
|
||||||
|
|
||||||
|
game_state = await init_game_state(level_decision)
|
||||||
|
updated_state = await generate_new_level(game_state)
|
||||||
|
return await create_image(updated_state, file_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
async def check_guess(guess, target_row, target_col):
|
||||||
|
"""验证答案"""
|
||||||
|
if guess == "#":
|
||||||
|
return True, "游戏结束!"
|
||||||
|
if len(guess) != 2 or not guess.isdigit():
|
||||||
|
return False, "请输入两位数字(例如:12),输入 # 退出游戏"
|
||||||
|
|
||||||
|
guessed_row = int(guess[0]) - 1
|
||||||
|
guessed_col = int(guess[1]) - 1
|
||||||
|
|
||||||
|
return (guessed_row == target_row and guessed_col == target_col), "恭喜!回答正确!" if (
|
||||||
|
guessed_row == target_row and guessed_col == target_col) else "回答错误,请再试一次!"
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
def download_image(url,file_path):
|
async def download_image(url,file_path):
|
||||||
"""
|
"""
|
||||||
下载图片
|
下载图片
|
||||||
:param url:
|
:param url:
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ from src.configs.path_config import image_local_path
|
||||||
from src.configs.api_config import smms_token,smms_image_upload_history,ju_he_token,ju_he_image_list
|
from src.configs.api_config import smms_token,smms_image_upload_history,ju_he_token,ju_he_image_list
|
||||||
|
|
||||||
"""本地图片"""
|
"""本地图片"""
|
||||||
def get_image_names():
|
async def get_image_names():
|
||||||
image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp'] # 定义常见的图片文件扩展名
|
image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp'] # 定义常见的图片文件扩展名
|
||||||
image_names = []
|
image_names = []
|
||||||
for root, dirs, files in os.walk(image_local_path):
|
for root, dirs, files in os.walk(image_local_path):
|
||||||
|
|
@ -18,7 +18,7 @@ def get_image_names():
|
||||||
return local_image_path
|
return local_image_path
|
||||||
|
|
||||||
""" sm.ms 图床"""
|
""" sm.ms 图床"""
|
||||||
def get_smms_image_url():
|
async def get_smms_image_url():
|
||||||
# 定义请求的参数
|
# 定义请求的参数
|
||||||
data = requests.get(smms_image_upload_history, headers={'Authorization': smms_token}, params={"page": "1"}).json().get('data')
|
data = requests.get(smms_image_upload_history, headers={'Authorization': smms_token}, params={"page": "1"}).json().get('data')
|
||||||
urls = [item['url'] for item in data]
|
urls = [item['url'] for item in data]
|
||||||
|
|
@ -26,7 +26,7 @@ def get_smms_image_url():
|
||||||
return random_url
|
return random_url
|
||||||
|
|
||||||
"""聚合图床"""
|
"""聚合图床"""
|
||||||
def get_juhe_image_url():
|
async def get_juhe_image_url():
|
||||||
# 定义请求的参数
|
# 定义请求的参数
|
||||||
params = {"token": ju_he_token,"f": "json","categories": "猫羽雫","page": 1, "size": 400}
|
params = {"token": ju_he_token,"f": "json","categories": "猫羽雫","page": 1, "size": 400}
|
||||||
random_url = random.choice(requests.get(ju_he_image_list, params=params).json().get('docs', [])).get('url')
|
random_url = random.choice(requests.get(ju_he_image_list, params=params).json().get('docs', [])).get('url')
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,3 @@ def download_qq_image_by_account(account):
|
||||||
file.write(response.content) # 将响应内容写入文件
|
file.write(response.content) # 将响应内容写入文件
|
||||||
return save_path
|
return save_path
|
||||||
|
|
||||||
"""删除QQ头像"""
|
|
||||||
def qq_image_delete():
|
|
||||||
for root, dirs, files in os.walk(image_local_qq_image_path):
|
|
||||||
for file in files:
|
|
||||||
file_path = os.path.join(root, file)
|
|
||||||
os.remove(file_path)
|
|
||||||
|
|
@ -6,10 +6,10 @@ import codecs
|
||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from random import Random
|
|
||||||
from Crypto.Cipher import AES
|
from Crypto.Cipher import AES
|
||||||
from graiax import silkcoder
|
from graiax import silkcoder
|
||||||
import src.clover_music.cloud_music.agent as agent
|
import src.clover_music.cloud_music.agent as agent
|
||||||
|
from src.clover_image.delete_file import delete_file
|
||||||
|
|
||||||
|
|
||||||
requests.packages.urllib3.disable_warnings()
|
requests.packages.urllib3.disable_warnings()
|
||||||
|
|
@ -66,7 +66,7 @@ qrcode_path = os.getcwd()+'/src/clover_music'
|
||||||
|
|
||||||
|
|
||||||
# 判断cookie是否有效
|
# 判断cookie是否有效
|
||||||
def netease_cloud_music_is_login(session):
|
async def netease_cloud_music_is_login(session):
|
||||||
try:
|
try:
|
||||||
session.cookies.load(ignore_discard=True)
|
session.cookies.load(ignore_discard=True)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
@ -88,7 +88,7 @@ def netease_cloud_music_is_login(session):
|
||||||
return session, False
|
return session, False
|
||||||
|
|
||||||
# 获取二维码的key
|
# 获取二维码的key
|
||||||
def get_qr_key(session):
|
async def get_qr_key(session):
|
||||||
url = f"https://music.163.com/weapi/login/qrcode/unikey"
|
url = f"https://music.163.com/weapi/login/qrcode/unikey"
|
||||||
data = {"params": login_params(None),"encSecKey": login_encSecKey()}
|
data = {"params": login_params(None),"encSecKey": login_encSecKey()}
|
||||||
response = session.post(url, headers=headers,params=data)
|
response = session.post(url, headers=headers,params=data)
|
||||||
|
|
@ -102,7 +102,7 @@ def get_qr_key(session):
|
||||||
# 创建 QRCode 对象
|
# 创建 QRCode 对象
|
||||||
qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, )
|
qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, )
|
||||||
# 生成二维码
|
# 生成二维码
|
||||||
def create_qr_code(unikey):
|
async def create_qr_code(unikey):
|
||||||
# 添加数据
|
# 添加数据
|
||||||
png_url = f"http://music.163.com/login?codekey={unikey}"
|
png_url = f"http://music.163.com/login?codekey={unikey}"
|
||||||
qr.add_data(png_url)
|
qr.add_data(png_url)
|
||||||
|
|
@ -113,13 +113,13 @@ def create_qr_code(unikey):
|
||||||
return qrcode_path + '/qrcode.png'
|
return qrcode_path + '/qrcode.png'
|
||||||
|
|
||||||
# 检查二维码状态是否被扫描
|
# 检查二维码状态是否被扫描
|
||||||
def check_qr_code(unikey,session):
|
async def check_qr_code(unikey,session):
|
||||||
token_url = f"https://music.163.com/weapi/login/qrcode/client/login?csrf_token="
|
token_url = f"https://music.163.com/weapi/login/qrcode/client/login?csrf_token="
|
||||||
u = str({'key': unikey, 'type': "1", 'csrf_token': ""})
|
u = str({'key': unikey, 'type': "1", 'csrf_token': ""})
|
||||||
qrcode_data = session.post( token_url,data={'params': login_params(u),'encSecKey': login_encSecKey()},headers=headers).json()
|
qrcode_data = session.post( token_url,data={'params': login_params(u),'encSecKey': login_encSecKey()},headers=headers).json()
|
||||||
return qrcode_data.get('code')
|
return qrcode_data.get('code')
|
||||||
|
|
||||||
def netease_music_search(keyword,session):
|
async def netease_music_search(keyword,session):
|
||||||
url = "http://music.163.com/api/search/get"
|
url = "http://music.163.com/api/search/get"
|
||||||
params = {
|
params = {
|
||||||
"s": keyword,
|
"s": keyword,
|
||||||
|
|
@ -163,7 +163,7 @@ def netease_music_search(keyword,session):
|
||||||
# return None
|
# return None
|
||||||
|
|
||||||
#所有歌曲都可以下载
|
#所有歌曲都可以下载
|
||||||
def netease_music_download(song_id,song_name,singer,session):
|
async def netease_music_download(song_id,song_name,singer,session):
|
||||||
|
|
||||||
if not os.path.exists(save_path):
|
if not os.path.exists(save_path):
|
||||||
os.makedirs(save_path)
|
os.makedirs(save_path)
|
||||||
|
|
@ -189,15 +189,12 @@ def netease_music_download(song_id,song_name,singer,session):
|
||||||
output_silk_path = os.path.join(save_path, os.path.splitext(file_name)[0] + ".silk")
|
output_silk_path = os.path.join(save_path, os.path.splitext(file_name)[0] + ".silk")
|
||||||
# 使用 graiax-silkcoder 进行转换
|
# 使用 graiax-silkcoder 进行转换
|
||||||
silkcoder.encode(file_path, output_silk_path,rate=32000 ,tencent=True,ios_adaptive=True)
|
silkcoder.encode(file_path, output_silk_path,rate=32000 ,tencent=True,ios_adaptive=True)
|
||||||
|
#删除临时文件
|
||||||
|
await delete_file(file_path)
|
||||||
return output_silk_path
|
return output_silk_path
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def netease_music_delete():
|
|
||||||
for root, dirs, files in os.walk(save_path):
|
|
||||||
for file in files:
|
|
||||||
file_path = os.path.join(root, file)
|
|
||||||
os.remove(file_path)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ from nonebot.adapters.qq import MessageSegment,MessageEvent, Message
|
||||||
import src.clover_videos.billibili.biliVideos as biliVideos
|
import src.clover_videos.billibili.biliVideos as biliVideos
|
||||||
from src.configs.path_config import video_path
|
from src.configs.path_config import video_path
|
||||||
|
|
||||||
bili_vid = on_command("B站搜索",rule=to_me(), priority=10, block=True)
|
bili_vid = on_command("B站搜索",rule=to_me(), priority=10)
|
||||||
@bili_vid.handle()
|
@bili_vid.handle()
|
||||||
async def get_bili_vid_info(message: MessageEvent):
|
async def get_bili_vid_info(message: MessageEvent):
|
||||||
content = message.get_plaintext().replace("/B站搜索", "").strip()
|
content = message.get_plaintext().replace("/B站搜索", "").strip()
|
||||||
|
|
@ -41,7 +41,7 @@ async def get_bili_vid_info(message: MessageEvent):
|
||||||
await bili_vid.finish(f"展示{len(search_result)}条结果中的前3条。")
|
await bili_vid.finish(f"展示{len(search_result)}条结果中的前3条。")
|
||||||
|
|
||||||
|
|
||||||
bili_bv_search = on_command("BV搜索", rule=to_me(), priority=10, block=True)
|
bili_bv_search = on_command("BV搜索", rule=to_me(), priority=10)
|
||||||
@bili_bv_search.handle()
|
@bili_bv_search.handle()
|
||||||
async def get_video_file(message: MessageEvent):
|
async def get_video_file(message: MessageEvent):
|
||||||
keyword = message.get_plaintext().replace("/BV搜索", "").strip().split()
|
keyword = message.get_plaintext().replace("/BV搜索", "").strip().split()
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,11 @@ from src.clover_sqlite.models.user import UserList
|
||||||
|
|
||||||
menu = ["/重启","/今日运势","/今日塔罗","/图","/日报","/点歌","/摸摸头","/群老婆","/今日老婆", "/开启ai","/关闭ai","/角色列表","/添加人设", "/更新人设", "/删除人设", "/切换人设", "/管理员注册",
|
menu = ["/重启","/今日运势","/今日塔罗","/图","/日报","/点歌","/摸摸头","/群老婆","/今日老婆", "/开启ai","/关闭ai","/角色列表","/添加人设", "/更新人设", "/删除人设", "/切换人设", "/管理员注册",
|
||||||
"/待办", "/test","/天气","我喜欢你", "❤", "/待办查询", "/新建待办", "/删除待办" ,"/cf","/B站搜索", "/BV搜索", "/喜报", "/悲报", "/luxun","/鲁迅说",
|
"/待办", "/test","/天气","我喜欢你", "❤", "/待办查询", "/新建待办", "/删除待办" ,"/cf","/B站搜索", "/BV搜索", "/喜报", "/悲报", "/luxun","/鲁迅说",
|
||||||
"/奶龙", "/repo", "/info", "/menu", "/轻小说","/本季新番","/新番观察"]
|
"/奶龙", "/repo", "/info", "/menu", "/轻小说","/本季新番","/新番观察","/绝对色感"]
|
||||||
|
|
||||||
send_menu = ["/menu","/今日运势","/今日塔罗","/图","/日报","/点歌","/摸摸头","/群老婆","/待办","/天气",
|
send_menu = ["/menu","/今日运势","/今日塔罗","/图","/日报","/点歌","/摸摸头","/群老婆","/待办","/天气",
|
||||||
"/待办查询", "/新建待办", "/删除待办" ,"/cf","/B站搜索", "/BV搜索", "/喜报", "/悲报","/鲁迅说","/轻小说","/本季新番","/新番观察"]
|
"/待办查询", "/新建待办", "/删除待办" ,"/cf","/B站搜索", "/BV搜索", "/喜报", "/悲报","/鲁迅说",
|
||||||
|
"/轻小说","/本季新番","/新番观察","/绝对色感"]
|
||||||
|
|
||||||
async def check_value_in_menu(message: MessageEvent) -> bool:
|
async def check_value_in_menu(message: MessageEvent) -> bool:
|
||||||
value = message.get_plaintext().strip().split(" ")
|
value = message.get_plaintext().strip().split(" ")
|
||||||
|
|
@ -23,13 +24,13 @@ async def check_value_in_menu(message: MessageEvent) -> bool:
|
||||||
group_id = "C2C" # 非群聊消息,存为c2c
|
group_id = "C2C" # 非群聊消息,存为c2c
|
||||||
#缓存用户id
|
#缓存用户id
|
||||||
await UserList.insert_user(message.author.id,group_id)
|
await UserList.insert_user(message.author.id,group_id)
|
||||||
if value[0] in menu:
|
if value[0] in menu or value[0].isdigit() or value[0] == "#":
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
check = on_message(rule=to_me() & Rule(check_value_in_menu) ,block=True, priority=10)
|
check = on_message(rule=to_me() & Rule(check_value_in_menu), priority=10)
|
||||||
@check.handle()
|
@check.handle()
|
||||||
async def handle_function(message: MessageEvent):
|
async def handle_function(message: MessageEvent):
|
||||||
|
|
||||||
|
|
@ -41,7 +42,7 @@ async def handle_function(message: MessageEvent):
|
||||||
member_openid, content = message.author.id, message.get_plaintext()
|
member_openid, content = message.author.id, message.get_plaintext()
|
||||||
status = await GroupChatRole.is_on(group_openid)
|
status = await GroupChatRole.is_on(group_openid)
|
||||||
if status:
|
if status:
|
||||||
msg = await ai_chat.silicon_flow(group_openid,content)
|
msg = await ai_chat.deepseek_chat(group_openid,content)
|
||||||
await check.finish(msg)
|
await check.finish(msg)
|
||||||
else:
|
else:
|
||||||
await check.finish(message=Message(random.choice(text_list)))
|
await check.finish(message=Message(random.choice(text_list)))
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,9 @@ from nonebot import on_command
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.adapters.qq import MessageSegment,MessageEvent
|
from nonebot.adapters.qq import MessageSegment,MessageEvent
|
||||||
from src.clover_music.cloud_music.cloud_music import *
|
from src.clover_music.cloud_music.cloud_music import *
|
||||||
|
from src.clover_image.delete_file import delete_file
|
||||||
|
|
||||||
music = on_command("点歌", rule=to_me(), priority=10, block=True)
|
music = on_command("点歌", rule=to_me(), priority=10)
|
||||||
@music.handle()
|
@music.handle()
|
||||||
async def handle_function(msg: MessageEvent):
|
async def handle_function(msg: MessageEvent):
|
||||||
keyword = msg.get_plaintext().replace("/点歌", "").strip(" ")
|
keyword = msg.get_plaintext().replace("/点歌", "").strip(" ")
|
||||||
|
|
@ -21,18 +22,18 @@ async def handle_function(msg: MessageEvent):
|
||||||
pickle.dump(session.cookies, f)
|
pickle.dump(session.cookies, f)
|
||||||
# 读取 cookie
|
# 读取 cookie
|
||||||
session.cookies = pickle.load(open('cloud_music_cookies.cookie', 'rb'))
|
session.cookies = pickle.load(open('cloud_music_cookies.cookie', 'rb'))
|
||||||
session, status = netease_cloud_music_is_login(session)
|
session, status = await netease_cloud_music_is_login(session)
|
||||||
if not status:
|
if not status:
|
||||||
await music.send("登录失效,请联系管理员进行登录")
|
await music.send("登录失效,请联系管理员进行登录")
|
||||||
unikey = get_qr_key(session)
|
unikey = await get_qr_key(session)
|
||||||
path = create_qr_code(unikey)
|
path = await create_qr_code(unikey)
|
||||||
|
|
||||||
"""是否要发送到QQ上面登录 """
|
"""是否要发送到QQ上面登录 """
|
||||||
# await clover_music.send(MessageSegment.file_image(Path(path)))
|
# await clover_music.send(MessageSegment.file_image(Path(path)))
|
||||||
"""是否要发送到QQ上面登录 """
|
"""是否要发送到QQ上面登录 """
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
code = check_qr_code(unikey, session)
|
code = await check_qr_code(unikey, session)
|
||||||
if '801' in str(code):
|
if '801' in str(code):
|
||||||
print('二维码未失效,请扫码!')
|
print('二维码未失效,请扫码!')
|
||||||
elif '802' in str(code):
|
elif '802' in str(code):
|
||||||
|
|
@ -47,14 +48,14 @@ async def handle_function(msg: MessageEvent):
|
||||||
pickle.dump(session.cookies, f)
|
pickle.dump(session.cookies, f)
|
||||||
|
|
||||||
#搜索歌曲
|
#搜索歌曲
|
||||||
song_id,song_name,singer,song_url = netease_music_search(keyword,session)
|
song_id,song_name,singer,song_url = await netease_music_search(keyword,session)
|
||||||
song_name = str(song_name).replace(".", "·").replace("/", "、")
|
song_name = str(song_name).replace(".", "·").replace("/", "、")
|
||||||
if song_id is None:
|
if song_id is None:
|
||||||
await music.finish("\n没有找到歌曲,或检索到的歌曲均为付费喔qwq\n这绝对不是我的错,绝对不是!")
|
await music.finish("\n没有找到歌曲,或检索到的歌曲均为付费喔qwq\n这绝对不是我的错,绝对不是!")
|
||||||
else:
|
else:
|
||||||
await music.send(MessageSegment.text(f" 来源:网易云音乐\n歌曲:{song_name} - {singer}\n请稍等喔🎵"))
|
await music.send(MessageSegment.text(f" 来源:网易云音乐\n歌曲:{song_name} - {singer}\n请稍等喔🎵"))
|
||||||
#返回转换后的歌曲路径
|
#返回转换后的歌曲路径
|
||||||
output_silk_path = netease_music_download(song_id, song_name, singer,session)
|
output_silk_path = await netease_music_download(song_id, song_name, singer,session)
|
||||||
|
|
||||||
if output_silk_path == -1:
|
if output_silk_path == -1:
|
||||||
await music.send("歌曲音频获取失败:登录信息失效。")
|
await music.send("歌曲音频获取失败:登录信息失效。")
|
||||||
|
|
@ -64,7 +65,7 @@ async def handle_function(msg: MessageEvent):
|
||||||
await music.send(MessageSegment.file_audio(Path(output_silk_path)))
|
await music.send(MessageSegment.file_audio(Path(output_silk_path)))
|
||||||
|
|
||||||
#删除临时文件
|
#删除临时文件
|
||||||
netease_music_delete()
|
await delete_file(output_silk_path)
|
||||||
await music.finish()
|
await music.finish()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ from src.configs.path_config import daily_news_path
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
daily_report = on_command("日报", rule=to_me(), priority=10, block=True)
|
daily_report = on_command("日报", rule=to_me(), priority=10)
|
||||||
@daily_report.handle()
|
@daily_report.handle()
|
||||||
async def handle_function():
|
async def handle_function():
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,11 @@ from src.clover_sqlite.models.fortune import QrFortune
|
||||||
from src.clover_sqlite.models.tarot import TarotExtractLog
|
from src.clover_sqlite.models.tarot import TarotExtractLog
|
||||||
import time
|
import time
|
||||||
|
|
||||||
fortune_by_sqlite = on_command("今日运势", rule=to_me(), priority=10, block=True)
|
fortune_by_sqlite = on_command("今日运势", rule=to_me(), priority=10)
|
||||||
@fortune_by_sqlite.handle()
|
@fortune_by_sqlite.handle()
|
||||||
async def get_today_fortune(message: MessageEvent):
|
async def get_today_fortune(message: MessageEvent):
|
||||||
|
|
||||||
local_image_path = get_image_names()
|
local_image_path = await get_image_names()
|
||||||
result = await QrFortune.get_fortune(message.get_user_id())
|
result = await QrFortune.get_fortune(message.get_user_id())
|
||||||
|
|
||||||
content = ("\n" + "您的今日运势为:" + "\n" +
|
content = ("\n" + "您的今日运势为:" + "\n" +
|
||||||
|
|
@ -35,7 +35,7 @@ async def get_today_fortune(message: MessageEvent):
|
||||||
await fortune_by_sqlite.finish("您的今日运势被外星人抢走啦,请重试。这绝对不是咱的错,绝对不是!")
|
await fortune_by_sqlite.finish("您的今日运势被外星人抢走啦,请重试。这绝对不是咱的错,绝对不是!")
|
||||||
|
|
||||||
|
|
||||||
tarot = on_command("今日塔罗", rule=to_me(), priority=10, block=True)
|
tarot = on_command("今日塔罗", rule=to_me(), priority=10)
|
||||||
@tarot.handle()
|
@tarot.handle()
|
||||||
async def get_tarot(message: MessageEvent):
|
async def get_tarot(message: MessageEvent):
|
||||||
#extract_type : 1大阿尔克纳牌 2小阿尔克纳牌 3 混合牌组 4三角牌阵 5六芒星牌阵 6凯尔特十字牌阵 7恋人牌阵
|
#extract_type : 1大阿尔克纳牌 2小阿尔克纳牌 3 混合牌组 4三角牌阵 5六芒星牌阵 6凯尔特十字牌阵 7恋人牌阵
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ from src.configs.path_config import font_path,good_bad,temp_path
|
||||||
# await good_news.finish("出错啦,请重试。")
|
# await good_news.finish("出错啦,请重试。")
|
||||||
|
|
||||||
|
|
||||||
good_news = on_command("喜报", rule=to_me(), priority=10, block=True, aliases={"悲报"})
|
good_news = on_command("喜报", rule=to_me(), priority=10, aliases={"悲报"})
|
||||||
@good_news.handle()
|
@good_news.handle()
|
||||||
async def function(message: MessageEvent):
|
async def function(message: MessageEvent):
|
||||||
value = message.get_plaintext().split(" ")
|
value = message.get_plaintext().split(" ")
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,11 @@ from src.clover_image.download_image import download_image
|
||||||
from src.configs.path_config import temp_path
|
from src.configs.path_config import temp_path
|
||||||
|
|
||||||
|
|
||||||
image = on_command("图", rule=to_me(), priority=10, block=True)
|
image = on_command("图", rule=to_me(), priority=10)
|
||||||
@image.handle()
|
@image.handle()
|
||||||
async def handle_function():
|
async def handle_function():
|
||||||
|
|
||||||
local_image_path = get_image_names()
|
local_image_path = await get_image_names()
|
||||||
await image.finish(MessageSegment.file_image(Path(local_image_path)))
|
await image.finish(MessageSegment.file_image(Path(local_image_path)))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -23,5 +23,5 @@ async def handle_function(message: MessageEvent):
|
||||||
filename = str(message.get_user_id()) + str(random.randint(0, 10000)) + ".jpg"
|
filename = str(message.get_user_id()) + str(random.randint(0, 10000)) + ".jpg"
|
||||||
image_ptah = temp_path + filename
|
image_ptah = temp_path + filename
|
||||||
|
|
||||||
download_image(message.attachments[0].url, image_ptah)
|
await download_image(message.attachments[0].url, image_ptah)
|
||||||
await image.finish(MessageSegment.file_image(Path(image_ptah)))
|
await image.finish(MessageSegment.file_image(Path(image_ptah)))
|
||||||
36
src/plugins/mini_game.py
Normal file
36
src/plugins/mini_game.py
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
import random
|
||||||
|
from pathlib import Path
|
||||||
|
from nonebot.params import CommandArg
|
||||||
|
from nonebot.rule import to_me
|
||||||
|
from nonebot.plugin import on_command
|
||||||
|
from nonebot.matcher import Matcher
|
||||||
|
from nonebot.internal.params import ArgPlainText
|
||||||
|
from nonebot.adapters.qq import MessageSegment, Message
|
||||||
|
from src.clover_image.color_sensitive_game import game_flow,check_guess
|
||||||
|
from src.configs.path_config import temp_path
|
||||||
|
from src.clover_image.delete_file import delete_file
|
||||||
|
|
||||||
|
color_sensitive_game = on_command("绝对色感", rule=to_me(), priority=10)
|
||||||
|
@color_sensitive_game.handle()
|
||||||
|
async def handle_function(matcher: Matcher, args: Message = CommandArg()):
|
||||||
|
level = args.extract_plain_text().replace("/绝对色感","").strip(" ")
|
||||||
|
|
||||||
|
if level not in ["初级","中级","高级","超神"]:
|
||||||
|
await color_sensitive_game.finish("请输入正确的参数, \n 如:/绝对色感 初级、中级、高级、超神")
|
||||||
|
|
||||||
|
file_path = temp_path + str(random.randint(0, 10000)) + ".jpeg"
|
||||||
|
result_list = await game_flow(level_decision = level,file_path = file_path)
|
||||||
|
await color_sensitive_game.send(MessageSegment.file_image(Path(result_list[0])))
|
||||||
|
matcher.state["result_list"] = result_list
|
||||||
|
matcher.set_arg("guess", args)
|
||||||
|
await delete_file(file_path)
|
||||||
|
|
||||||
|
@color_sensitive_game.got("guess", prompt="请输入坐标")
|
||||||
|
async def got_location(matcher: Matcher,guess: str = ArgPlainText()):
|
||||||
|
result_list = matcher.state.get("result_list")
|
||||||
|
target_row = result_list[1] # x
|
||||||
|
target_col = result_list[2] # y
|
||||||
|
boolean, msg = await check_guess(guess, target_row, target_col)
|
||||||
|
if boolean :
|
||||||
|
await color_sensitive_game.finish(msg)
|
||||||
|
await color_sensitive_game.reject(msg)
|
||||||
|
|
@ -3,7 +3,7 @@ from nonebot.plugin import on_command
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from src.clover_sqlite.models.to_do import ToDoList
|
from src.clover_sqlite.models.to_do import ToDoList
|
||||||
|
|
||||||
get_todo_list = on_command("待办查询", rule=to_me(), priority=10, block=True, aliases={"代办", "daiban"})
|
get_todo_list = on_command("待办查询", rule=to_me(), priority=10, aliases={"代办", "daiban"})
|
||||||
@get_todo_list.handle()
|
@get_todo_list.handle()
|
||||||
async def show_todo_list(message: MessageEvent):
|
async def show_todo_list(message: MessageEvent):
|
||||||
"""
|
"""
|
||||||
|
|
@ -21,7 +21,7 @@ async def show_todo_list(message: MessageEvent):
|
||||||
await get_todo_list.finish(f"您的待办有如下哦:⭐\n\n{todo_list}")
|
await get_todo_list.finish(f"您的待办有如下哦:⭐\n\n{todo_list}")
|
||||||
|
|
||||||
|
|
||||||
insert_todo = on_command("新建待办", rule=to_me(), priority=10, block=True)
|
insert_todo = on_command("新建待办", rule=to_me(), priority=10)
|
||||||
@insert_todo.handle()
|
@insert_todo.handle()
|
||||||
async def insert_todo_list(message: MessageEvent):
|
async def insert_todo_list(message: MessageEvent):
|
||||||
member_openid = message.get_user_id()
|
member_openid = message.get_user_id()
|
||||||
|
|
@ -33,7 +33,7 @@ async def insert_todo_list(message: MessageEvent):
|
||||||
await insert_todo.finish("\n请输入 /新建待办+待办内容 哦")
|
await insert_todo.finish("\n请输入 /新建待办+待办内容 哦")
|
||||||
|
|
||||||
|
|
||||||
delete_todo = on_command("删除待办", rule=to_me(), priority=10, block=True)
|
delete_todo = on_command("删除待办", rule=to_me(), priority=10)
|
||||||
@delete_todo.handle()
|
@delete_todo.handle()
|
||||||
async def del_todo(message: MessageEvent):
|
async def del_todo(message: MessageEvent):
|
||||||
member_openid = message.get_user_id()
|
member_openid = message.get_user_id()
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,11 @@ from nonebot.adapters.qq import Message, MessageEvent
|
||||||
from nonebot.adapters.qq import MessageSegment
|
from nonebot.adapters.qq import MessageSegment
|
||||||
from nonebot.plugin import on_command
|
from nonebot.plugin import on_command
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from src.clover_image.qq_image import download_qq_image,qq_image_delete
|
from src.clover_image.qq_image import download_qq_image
|
||||||
|
from src.clover_image.delete_file import delete_file
|
||||||
from src.clover_sqlite.models.user import UserList
|
from src.clover_sqlite.models.user import UserList
|
||||||
|
|
||||||
today_group_wife = on_command("群老婆", rule=to_me(), priority=10, block=True)
|
today_group_wife = on_command("群老婆", rule=to_me(), priority=10)
|
||||||
@today_group_wife.handle()
|
@today_group_wife.handle()
|
||||||
async def handle_function(message: MessageEvent):
|
async def handle_function(message: MessageEvent):
|
||||||
member_openid = message.get_user_id()
|
member_openid = message.get_user_id()
|
||||||
|
|
@ -19,11 +20,11 @@ async def handle_function(message: MessageEvent):
|
||||||
MessageSegment.text("您的今日群老婆"),
|
MessageSegment.text("您的今日群老婆"),
|
||||||
MessageSegment.file_image(Path(local_image_path)),
|
MessageSegment.file_image(Path(local_image_path)),
|
||||||
])
|
])
|
||||||
qq_image_delete()
|
await delete_file(local_image_path)
|
||||||
await today_group_wife.finish(msg)
|
await today_group_wife.finish(msg)
|
||||||
|
|
||||||
|
|
||||||
today_wife = on_command("今日老婆", rule=to_me(), priority=10, block=True)
|
today_wife = on_command("今日老婆", rule=to_me(), priority=10)
|
||||||
@today_wife.handle()
|
@today_wife.handle()
|
||||||
async def handle_function(message: MessageEvent):
|
async def handle_function(message: MessageEvent):
|
||||||
member_openid = message.get_user_id()
|
member_openid = message.get_user_id()
|
||||||
|
|
@ -33,7 +34,7 @@ async def handle_function(message: MessageEvent):
|
||||||
MessageSegment.file_image(Path(local_image_path)),
|
MessageSegment.file_image(Path(local_image_path)),
|
||||||
])
|
])
|
||||||
|
|
||||||
qq_image_delete()
|
await delete_file(local_image_path)
|
||||||
await today_wife.finish(msg)
|
await today_wife.finish(msg)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,11 @@ from nonebot.rule import to_me
|
||||||
from nonebot.plugin import on_command
|
from nonebot.plugin import on_command
|
||||||
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
|
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
|
||||||
from src.clover_sqlite.models.touch import QrTouch, QrTouchLog
|
from src.clover_sqlite.models.touch import QrTouch, QrTouchLog
|
||||||
from src.clover_image.qq_image import download_qq_image_by_account, qq_image_delete
|
from src.clover_image.qq_image import download_qq_image_by_account
|
||||||
|
from src.clover_image.delete_file import delete_file
|
||||||
from src.clover_image.rua import rua
|
from src.clover_image.rua import rua
|
||||||
|
|
||||||
to = on_command("摸摸头", rule=to_me(), priority=10, block=True)
|
to = on_command("摸摸头", rule=to_me(), priority=10)
|
||||||
@to.handle()
|
@to.handle()
|
||||||
async def handle_touch(message: MessageEvent):
|
async def handle_touch(message: MessageEvent):
|
||||||
member_openid = message.get_user_id()
|
member_openid = message.get_user_id()
|
||||||
|
|
@ -24,5 +25,5 @@ async def handle_touch(message: MessageEvent):
|
||||||
local_gif = rua(download_qq_image_by_account(None)).add_gif()
|
local_gif = rua(download_qq_image_by_account(None)).add_gif()
|
||||||
msg = Message([MessageSegment.file_image(Path(local_gif)),
|
msg = Message([MessageSegment.file_image(Path(local_gif)),
|
||||||
MessageSegment.text(result.reply_touch_content),])
|
MessageSegment.text(result.reply_touch_content),])
|
||||||
qq_image_delete()
|
await delete_file(local_gif)
|
||||||
await to.finish(msg)
|
await to.finish(msg)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from nonebot.plugin import on_command
|
||||||
from nonebot.adapters import Message
|
from nonebot.adapters import Message
|
||||||
from nonebot.params import CommandArg
|
from nonebot.params import CommandArg
|
||||||
|
|
||||||
weather = on_command("天气", rule=to_me(), aliases={"weather", "查天气"}, priority=10, block=True)
|
weather = on_command("天气", rule=to_me(), aliases={"weather", "查天气"}, priority=10)
|
||||||
|
|
||||||
@weather.handle()
|
@weather.handle()
|
||||||
async def handle_function(args: Message = CommandArg()):
|
async def handle_function(args: Message = CommandArg()):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue