mirror of
https://github.com/ClovertaTheTrilobita/SanYeCao-Nonebot.git
synced 2026-04-01 22:04:51 +00:00
整合文件夹名称
This commit is contained in:
parent
c59cb5214a
commit
6183b91908
37 changed files with 54 additions and 214 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -8,7 +8,7 @@ chat_bot.db-wal
|
||||||
chat_bot.db-shm
|
chat_bot.db-shm
|
||||||
cloud_music_cookies.cookie
|
cloud_music_cookies.cookie
|
||||||
chat_history.json
|
chat_history.json
|
||||||
/src/music/qrcode.png
|
/src/clover_music/qrcode.png
|
||||||
/chat.db
|
/chat.db
|
||||||
/chat_bot.db-wal
|
/chat_bot.db-wal
|
||||||
/chat_bot.db-shm
|
/chat_bot.db-shm
|
||||||
|
|
|
||||||
20
README.md
20
README.md
|
|
@ -168,7 +168,7 @@ python bot.by
|
||||||
|
|
||||||
#### 📲所有指令
|
#### 📲所有指令
|
||||||
|
|
||||||
机器人的指令列表在[<B>src/qq_plugins/check.py</B>](src/qq_plugins/check.py)中,有如下指令:
|
机器人的指令列表在[<B>src/qq_plugins/check.py</B>](src/plugins/check.py)中,有如下指令:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办", "/开启ai", "/关闭ai", "/cf", "/管理员确认"]
|
menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办", "/开启ai", "/关闭ai", "/cf", "/管理员确认"]
|
||||||
|
|
@ -207,7 +207,7 @@ admin_list
|
||||||
group_list
|
group_list
|
||||||
```
|
```
|
||||||
|
|
||||||
初始化相关脚本存放在 [<b>src/my_sqlite/data_init</b>](src/my_sqlite/data_init) 目录下。
|
初始化相关脚本存放在 [<b>src/my_sqlite/data_init</b>](src/clover_sqlite/data_init) 目录下。
|
||||||
|
|
||||||
每次启动机器人,程序会自动检查上述8张表是否存在,有表缺失则会在数据库中自动创建对应的表。
|
每次启动机器人,程序会自动检查上述8张表是否存在,有表缺失则会在数据库中自动创建对应的表。
|
||||||
|
|
||||||
|
|
@ -221,17 +221,17 @@ group_list
|
||||||
|
|
||||||
机器人支持[<b>SMMS图床</b>](https://sm.ms/)、[<b>聚合图床</b>](https://www.superbed.cn/)、从**本地**发送图片。
|
机器人支持[<b>SMMS图床</b>](https://sm.ms/)、[<b>聚合图床</b>](https://www.superbed.cn/)、从**本地**发送图片。
|
||||||
|
|
||||||
获取图片的方法统一编写在[<B>src/image/get_image.py</B>](src/image/get_image.py)下。
|
获取图片的方法统一编写在[<B>src/image/get_image.py</B>](src/clover_image/get_image.py)下。
|
||||||
|
|
||||||
##### 使用:
|
##### 使用:
|
||||||
|
|
||||||
首先找到[<b>src/image/config/image.yaml</b>](src/image/config/image.yaml)
|
首先找到[<b>src/image/config/image.yaml</b>](src/clover_image/config/image.yaml)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
image:
|
image:
|
||||||
app_id: "<KEY>"
|
app_id: "<KEY>"
|
||||||
image_local_qq_image_path: "src/image/qq_image"
|
image_local_qq_image_path: "src/clover_image/qq_image"
|
||||||
image_local_path: "src/image/MaoYuNa"
|
image_local_path: "src/clover_image/MaoYuNa"
|
||||||
#SMMS图床相关配置
|
#SMMS图床相关配置
|
||||||
smms_token: "<KEY>" # sm.ms图床的token
|
smms_token: "<KEY>" # sm.ms图床的token
|
||||||
smms_image_upload_history: "https://sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址
|
smms_image_upload_history: "https://sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址
|
||||||
|
|
@ -242,7 +242,7 @@ image:
|
||||||
|
|
||||||
将你的机器人app_id,smms图床Token和聚合图床Token替换上述<i>\<KEY></i>(可以根据自身需求选填)
|
将你的机器人app_id,smms图床Token和聚合图床Token替换上述<i>\<KEY></i>(可以根据自身需求选填)
|
||||||
|
|
||||||
之后在[<B>get_image.py</B>](src/image/get_image.py)中找到对应的方法,根据自身需求调用。
|
之后在[<B>get_image.py</B>](src/clover_image/get_image.py)中找到对应的方法,根据自身需求调用。
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
|
@ -266,7 +266,7 @@ image:
|
||||||
登录失效,请联系管理员进行登录
|
登录失效,请联系管理员进行登录
|
||||||
```
|
```
|
||||||
|
|
||||||
此时会在[<b>src/music</b>](src/music)目录下生成一张<i><b>qrcode.png</b></i>,您需要使用手机端网易云音乐**扫码**该二维码,登录您的网易云账号。
|
此时会在[<b>src/music</b>](src/clover_music)目录下生成一张<i><b>qrcode.png</b></i>,您需要使用手机端网易云音乐**扫码**该二维码,登录您的网易云账号。
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
|
@ -276,7 +276,7 @@ image:
|
||||||
|
|
||||||
#### 💡使用第三方语言模型
|
#### 💡使用第三方语言模型
|
||||||
|
|
||||||
打开[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/ai_chat/config/chat_ai.yaml)
|
打开[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/clover_openai/config/chat_ai.yaml)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
chat_ai:
|
chat_ai:
|
||||||
|
|
@ -305,7 +305,7 @@ chat_ai:
|
||||||
|
|
||||||
###### 1.注册为管理员<a id="admin_control"></a>
|
###### 1.注册为管理员<a id="admin_control"></a>
|
||||||
|
|
||||||
在[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/ai_chat/config/chat_ai.yaml)内,找到
|
在[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/clover_openai/config/chat_ai.yaml)内,找到
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
admin_password: "<key>" # 设置管理员认证密码
|
admin_password: "<key>" # 设置管理员认证密码
|
||||||
|
|
|
||||||
2
bot.py
2
bot.py
|
|
@ -9,7 +9,7 @@ driver.register_adapter(QQAdapter) # 注册QQ适配器
|
||||||
nonebot.load_from_toml("pyproject.toml")
|
nonebot.load_from_toml("pyproject.toml")
|
||||||
logger.add("src/resources/log/error.log", level="ERROR", format=default_format, rotation="1 week")
|
logger.add("src/resources/log/error.log", level="ERROR", format=default_format, rotation="1 week")
|
||||||
|
|
||||||
from src.my_sqlite.data_init.db_connect import disconnect, init
|
from src.clover_sqlite.data_init.db_connect import disconnect, init
|
||||||
driver.on_startup(init)
|
driver.on_startup(init)
|
||||||
driver.on_shutdown(disconnect)
|
driver.on_shutdown(disconnect)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,5 +10,5 @@ adapters = [
|
||||||
{ name = "QQ", module_name = "nonebot.adapters.qq" }
|
{ name = "QQ", module_name = "nonebot.adapters.qq" }
|
||||||
]
|
]
|
||||||
plugins = []
|
plugins = []
|
||||||
plugin_dirs = ["src/qq_plugins"]
|
plugin_dirs = ["src/plugins"]
|
||||||
builtin_plugins = ["echo"]
|
builtin_plugins = ["echo"]
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,10 @@ def djs(js):
|
||||||
break
|
break
|
||||||
return jst
|
return jst
|
||||||
def get_login_js():
|
def get_login_js():
|
||||||
return djs('src/music/cloud_music/jsdm.js')
|
return djs('src/clover_music/cloud_music/jsdm.js')
|
||||||
|
|
||||||
def get_param_js():
|
def get_param_js():
|
||||||
return djs('src/music/cloud_music/param.js')
|
return djs('src/clover_music/cloud_music/param.js')
|
||||||
|
|
||||||
# 获取ptqrtoken
|
# 获取ptqrtoken
|
||||||
def ptqrtoken(qrsign):
|
def ptqrtoken(qrsign):
|
||||||
|
|
@ -9,7 +9,7 @@ from io import BytesIO
|
||||||
from random import Random
|
from random import Random
|
||||||
from Crypto.Cipher import AES
|
from Crypto.Cipher import AES
|
||||||
from graiax import silkcoder
|
from graiax import silkcoder
|
||||||
import src.music.cloud_music.agent as agent
|
import src.clover_music.cloud_music.agent as agent
|
||||||
|
|
||||||
|
|
||||||
requests.packages.urllib3.disable_warnings()
|
requests.packages.urllib3.disable_warnings()
|
||||||
|
|
@ -60,8 +60,8 @@ def get_music(id):
|
||||||
"""
|
"""
|
||||||
使用二维码登录网易云音乐,需要先获取二维码的key,然后使用该key生成二维码,扫描二维码登录,最后通过登录接口 返回cookie 保存起来
|
使用二维码登录网易云音乐,需要先获取二维码的key,然后使用该key生成二维码,扫描二维码登录,最后通过登录接口 返回cookie 保存起来
|
||||||
"""
|
"""
|
||||||
save_path = os.getcwd()+'/src/music/netease_music'
|
save_path = os.getcwd()+'/src/clover_music/netease_music'
|
||||||
qrcode_path = os.getcwd()+'/src/music'
|
qrcode_path = os.getcwd()+'/src/clover_music'
|
||||||
|
|
||||||
|
|
||||||
# 判断cookie是否有效
|
# 判断cookie是否有效
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import openai
|
import openai
|
||||||
import requests
|
import requests
|
||||||
from src.my_sqlite.models.chat import GroupChatRole
|
from src.clover_sqlite.models.chat import GroupChatRole
|
||||||
from src.configs.api_config import v3url, v3key, deepseek_url, deepseek_key
|
from src.configs.api_config import v3url, v3key, deepseek_url, deepseek_key
|
||||||
|
|
||||||
openai.api_key = deepseek_key
|
openai.api_key = deepseek_key
|
||||||
|
|
@ -31,7 +31,7 @@ def todo_init():
|
||||||
"""
|
"""
|
||||||
def execute_init_file3():
|
def execute_init_file3():
|
||||||
# 拼接文件的完整路径
|
# 拼接文件的完整路径
|
||||||
file_path = os.getcwd() + "/src/my_sqlite/data_init/todo_init.py"
|
file_path = os.getcwd() + "/src/clover_sqlite/data_init/todo_init.py"
|
||||||
init_file_path = os.path.join(os.path.dirname(__file__), file_path)
|
init_file_path = os.path.join(os.path.dirname(__file__), file_path)
|
||||||
try:
|
try:
|
||||||
# 执行初始化文件
|
# 执行初始化文件
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import time
|
import time
|
||||||
from tortoise import fields
|
from tortoise import fields
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
from src.my_sqlite.data_init.db_connect import Model
|
from src.clover_sqlite.data_init.db_connect import Model
|
||||||
|
|
||||||
class BanConsole(Model):
|
class BanConsole(Model):
|
||||||
id = fields.IntField(primary_key=True, generated=True, auto_increment=True)
|
id = fields.IntField(primary_key=True, generated=True, auto_increment=True)
|
||||||
|
|
@ -2,7 +2,7 @@ from typing import Any
|
||||||
from tortoise import fields
|
from tortoise import fields
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
from tortoise.fields import JSONField
|
from tortoise.fields import JSONField
|
||||||
from src.my_sqlite.data_init.db_connect import Model
|
from src.clover_sqlite.data_init.db_connect import Model
|
||||||
|
|
||||||
|
|
||||||
class ChatRole(Model):
|
class ChatRole(Model):
|
||||||
|
|
@ -2,7 +2,7 @@ import random
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from tortoise import fields
|
from tortoise import fields
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
from src.my_sqlite.data_init.db_connect import Model
|
from src.clover_sqlite.data_init.db_connect import Model
|
||||||
|
|
||||||
class QrFortune(Model):
|
class QrFortune(Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -3,7 +3,7 @@ import random
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from tortoise import fields
|
from tortoise import fields
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
from src.my_sqlite.data_init.db_connect import Model
|
from src.clover_sqlite.data_init.db_connect import Model
|
||||||
from src.configs.path_config import tarots_img_path
|
from src.configs.path_config import tarots_img_path
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -88,7 +88,7 @@ class MajorArcanaLog(Model):
|
||||||
'ints': ints,
|
'ints': ints,
|
||||||
'name': model.name,
|
'name': model.name,
|
||||||
'meaning': meaning,
|
'meaning': meaning,
|
||||||
'image': image,
|
'clover_image': image,
|
||||||
'create_time':datetime.now().date()
|
'create_time':datetime.now().date()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from tortoise import fields
|
from tortoise import fields
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
from src.my_sqlite.data_init.db_connect import Model
|
from src.clover_sqlite.data_init.db_connect import Model
|
||||||
|
|
||||||
|
|
||||||
class ToDoList(Model):
|
class ToDoList(Model):
|
||||||
|
|
@ -2,7 +2,7 @@ from datetime import datetime
|
||||||
import random
|
import random
|
||||||
from tortoise import fields
|
from tortoise import fields
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
from src.my_sqlite.data_init.db_connect import Model
|
from src.clover_sqlite.data_init.db_connect import Model
|
||||||
|
|
||||||
|
|
||||||
class QrTouch(Model):
|
class QrTouch(Model):
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import random
|
import random
|
||||||
from tortoise import fields
|
from tortoise import fields
|
||||||
from src.my_sqlite.data_init.db_connect import Model
|
from src.clover_sqlite.data_init.db_connect import Model
|
||||||
|
|
||||||
class UserList(Model):
|
class UserList(Model):
|
||||||
user_id = fields.CharField(max_length=64, description="用户member_openid")
|
user_id = fields.CharField(max_length=64, description="用户member_openid")
|
||||||
|
|
@ -8,18 +8,18 @@ bot_account= "<KEY>"
|
||||||
|
|
||||||
# SMMS图床相关配置
|
# SMMS图床相关配置
|
||||||
smms_token= "<KEY>" # sm.ms图床的token
|
smms_token= "<KEY>" # sm.ms图床的token
|
||||||
smms_image_upload_history= "https=//sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址
|
smms_image_upload_history= "https://sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址
|
||||||
|
|
||||||
# 聚合图床相关配置
|
# 聚合图床相关配置
|
||||||
ju_he_token= "<KEY>" # 聚合图床的token
|
ju_he_token= "<KEY>" # 聚合图床的token
|
||||||
ju_he_image_list= "https=//api.superbed.cn/timeline" # 聚合图床获取上传图片历史API地址
|
ju_he_image_list= "https://api.superbed.cn/timeline" # 聚合图床获取上传图片历史API地址
|
||||||
|
|
||||||
"""
|
"""
|
||||||
AI
|
AI
|
||||||
"""
|
"""
|
||||||
admin_password= "123456"#默认注册管理员密码
|
admin_password= "123456"#默认注册管理员密码
|
||||||
# 图灵机器人相关配置
|
# 图灵机器人相关配置
|
||||||
v3url= "https=//api.vveai.com/v1/chat/completions"
|
v3url= "https://api.vveai.com/v1/chat/completions"
|
||||||
v3key= "<KEY>"
|
v3key= "<KEY>"
|
||||||
# DeepSeek相关配置
|
# DeepSeek相关配置
|
||||||
deepseek_url= "https://api.deepseek.com"
|
deepseek_url= "https://api.deepseek.com"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
path = os.getcwd()+'/src/resources/image'
|
path = os.getcwd()+'/src/resources/clover_image'
|
||||||
|
|
||||||
|
|
||||||
#塔罗牌图片路径
|
#塔罗牌图片路径
|
||||||
|
|
@ -16,7 +16,7 @@ rua_png = path+'/rua/'
|
||||||
|
|
||||||
|
|
||||||
# 图片路径
|
# 图片路径
|
||||||
IMAGE_PATH = Path() / "resources" / "image"
|
IMAGE_PATH = Path() / "resources" / "clover_image"
|
||||||
# 语音路径
|
# 语音路径
|
||||||
RECORD_PATH = Path() / "resources" / "record"
|
RECORD_PATH = Path() / "resources" / "record"
|
||||||
# 文本路径
|
# 文本路径
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import nonebot.adapters.qq.exception
|
||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.adapters.qq import MessageSegment,MessageEvent, Message
|
from nonebot.adapters.qq import MessageSegment,MessageEvent, Message
|
||||||
import src.videos.billibili.biliVideos as biliVideos
|
import src.clover_videos.billibili.biliVideos as biliVideos
|
||||||
|
|
||||||
bili_vid = on_command("B站搜索",rule=to_me(), priority=10, block=True)
|
bili_vid = on_command("B站搜索",rule=to_me(), priority=10, block=True)
|
||||||
@bili_vid.handle()
|
@bili_vid.handle()
|
||||||
|
|
@ -70,7 +70,7 @@ async def get_video_file(message: MessageEvent):
|
||||||
# biliVideos.transcode_video(f"{cid}.mp4",f"{cid}-o.mp4")
|
# biliVideos.transcode_video(f"{cid}.mp4",f"{cid}-o.mp4")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# await bili_bv_search.send(Message(MessageSegment.file_video(Path(f"./src/videos/file/{cid}.mp4"))))
|
# await bili_bv_search.send(Message(MessageSegment.file_video(Path(f"./src/clover_videos/file/{cid}.mp4"))))
|
||||||
await bili_bv_search.send(MessageSegment.video(video_url))
|
await bili_bv_search.send(MessageSegment.video(video_url))
|
||||||
except nonebot.adapters.qq.exception.ActionFailed as e:
|
except nonebot.adapters.qq.exception.ActionFailed as e:
|
||||||
print("\033[32m" + str(time.strftime("%m-%d %H:%M:%S")) +"\033[0m [" + "\033[31;1mFAILED\033[0m" + "]" + "\033[31;1m nonebot.adapters.qq.exception.ActionFailed \033[0m" + str(e))
|
print("\033[32m" + str(time.strftime("%m-%d %H:%M:%S")) +"\033[0m [" + "\033[31;1mFAILED\033[0m" + "]" + "\033[31;1m nonebot.adapters.qq.exception.ActionFailed \033[0m" + str(e))
|
||||||
|
|
@ -102,7 +102,7 @@ async def get_video_file(message: MessageEvent):
|
||||||
# biliVideos.video_download(video_url, cid)
|
# biliVideos.video_download(video_url, cid)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# await bili_bv_search.send(Message(MessageSegment.file_video(Path(f"./src/videos/file/{cid}.mp4"))))
|
# await bili_bv_search.send(Message(MessageSegment.file_video(Path(f"./src/clover_videos/file/{cid}.mp4"))))
|
||||||
await bili_bv_search.send(MessageSegment.video(video_url))
|
await bili_bv_search.send(MessageSegment.video(video_url))
|
||||||
except nonebot.adapters.qq.exception.ActionFailed as e:
|
except nonebot.adapters.qq.exception.ActionFailed as e:
|
||||||
print("\033[32m" + str(time.strftime("%m-%d %H:%M:%S")) +
|
print("\033[32m" + str(time.strftime("%m-%d %H:%M:%S")) +
|
||||||
|
|
@ -2,7 +2,7 @@ import re
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.plugin import on_command
|
from nonebot.plugin import on_command
|
||||||
from nonebot.adapters.qq import MessageEvent
|
from nonebot.adapters.qq import MessageEvent
|
||||||
from src.my_sqlite.models.chat import ChatRole, GroupChatRole
|
from src.clover_sqlite.models.chat import ChatRole, GroupChatRole
|
||||||
from src.configs.api_config import admin_password
|
from src.configs.api_config import admin_password
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -7,9 +7,9 @@ from nonebot.rule import Rule, to_me
|
||||||
from nonebot.plugin import on_command, on_keyword
|
from nonebot.plugin import on_command, on_keyword
|
||||||
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
|
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
|
||||||
|
|
||||||
from src.ai_chat import ai_chat
|
from src.clover_openai import ai_chat
|
||||||
from src.my_sqlite.models.chat import GroupChatRole
|
from src.clover_sqlite.models.chat import GroupChatRole
|
||||||
from src.my_sqlite.models.user import UserList
|
from src.clover_sqlite.models.user import UserList
|
||||||
import platform
|
import platform
|
||||||
import psutil
|
import psutil
|
||||||
import time
|
import time
|
||||||
|
|
@ -87,7 +87,7 @@ async def github_repo():
|
||||||
|
|
||||||
content = "三叶草bot仓库地址\n一起来搭个机器人吧😆"
|
content = "三叶草bot仓库地址\n一起来搭个机器人吧😆"
|
||||||
msg = Message([
|
msg = Message([
|
||||||
MessageSegment.file_image(Path("src/resources/image/github_repo/SanYeCao-Nonebot3.png")),
|
MessageSegment.file_image(Path("src/resources/clover_image/github_repo/SanYeCao-Nonebot3.png")),
|
||||||
MessageSegment.text(content),
|
MessageSegment.text(content),
|
||||||
])
|
])
|
||||||
await repository.finish(msg)
|
await repository.finish(msg)
|
||||||
|
|
@ -4,7 +4,7 @@ from pathlib import Path
|
||||||
from nonebot import on_command
|
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.music.cloud_music.cloud_music import *
|
from src.clover_music.cloud_music.cloud_music import *
|
||||||
|
|
||||||
music = on_command("点歌", rule=to_me(), priority=10, block=True)
|
music = on_command("点歌", rule=to_me(), priority=10, block=True)
|
||||||
@music.handle()
|
@music.handle()
|
||||||
|
|
@ -28,7 +28,7 @@ async def handle_function(msg: MessageEvent):
|
||||||
path = create_qr_code(unikey)
|
path = create_qr_code(unikey)
|
||||||
|
|
||||||
"""是否要发送到QQ上面登录 """
|
"""是否要发送到QQ上面登录 """
|
||||||
# await music.send(MessageSegment.file_image(Path(path)))
|
# await clover_music.send(MessageSegment.file_image(Path(path)))
|
||||||
"""是否要发送到QQ上面登录 """
|
"""是否要发送到QQ上面登录 """
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
|
@ -24,7 +24,7 @@ async def get_cf_rounds():
|
||||||
if matches["phase"] == "FINISHED":
|
if matches["phase"] == "FINISHED":
|
||||||
break
|
break
|
||||||
|
|
||||||
cf_image_path = './src/resources/image/codeforces/cfContestQR.png'
|
cf_image_path = './src/resources/clover_image/codeforces/cfContestQR.png'
|
||||||
msg = Message([
|
msg = Message([
|
||||||
MessageSegment.file_image(Path(cf_image_path)),
|
MessageSegment.file_image(Path(cf_image_path)),
|
||||||
MessageSegment.text(all_matches),
|
MessageSegment.text(all_matches),
|
||||||
|
|
@ -3,9 +3,9 @@ from pathlib import Path
|
||||||
from nonebot.rule import to_me
|
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,exception
|
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment,exception
|
||||||
from src.image.get_image import get_image_names
|
from src.clover_image.get_image import get_image_names
|
||||||
from src.my_sqlite.models.fortune import QrFortune,QrFortuneLog
|
from src.clover_sqlite.models.fortune import QrFortune,QrFortuneLog
|
||||||
from src.my_sqlite.models.tarot import MajorArcana
|
from src.clover_sqlite.models.tarot import MajorArcana
|
||||||
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, block=True)
|
||||||
|
|
@ -30,7 +30,7 @@ async def good_news_img(message: MessageEvent):
|
||||||
|
|
||||||
img_url = response['url']
|
img_url = response['url']
|
||||||
# try:
|
# try:
|
||||||
# await good_news.finish(MessageSegment.image(img_url))
|
# await good_news.finish(MessageSegment.clover_image(img_url))
|
||||||
# except BaseException:
|
# except BaseException:
|
||||||
# await good_news.finish("出错啦,请重试。")
|
# await good_news.finish("出错啦,请重试。")
|
||||||
|
|
||||||
|
|
@ -2,7 +2,7 @@ from pathlib import Path
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.plugin import on_command
|
from nonebot.plugin import on_command
|
||||||
from nonebot.adapters.qq import MessageSegment
|
from nonebot.adapters.qq import MessageSegment
|
||||||
from src.image.get_image import get_image_names
|
from src.clover_image.get_image import get_image_names
|
||||||
|
|
||||||
image = on_command("图", rule=to_me(), priority=10, block=True)
|
image = on_command("图", rule=to_me(), priority=10, block=True)
|
||||||
|
|
||||||
0
src/plugins/test/test.py
Normal file
0
src/plugins/test/test.py
Normal file
|
|
@ -1,7 +1,7 @@
|
||||||
from nonebot.adapters.qq import MessageEvent
|
from nonebot.adapters.qq import MessageEvent
|
||||||
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.my_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, block=True, aliases={"代办", "daiban"})
|
||||||
@get_todo_list.handle()
|
@get_todo_list.handle()
|
||||||
|
|
@ -3,8 +3,8 @@ 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.image.get_image import download_qq_image,qq_image_delete
|
from src.clover_image.get_image import download_qq_image,qq_image_delete
|
||||||
from src.my_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, block=True)
|
||||||
@today_group_wife.handle()
|
@today_group_wife.handle()
|
||||||
|
|
@ -2,8 +2,8 @@ from pathlib import Path
|
||||||
from nonebot.rule import to_me
|
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.my_sqlite.models.touch import QrTouch, QrTouchLog
|
from src.clover_sqlite.models.touch import QrTouch, QrTouchLog
|
||||||
from src.image.get_image import download_qq_image_by_account, qq_image_delete, rua
|
from src.clover_image.get_image import download_qq_image_by_account, qq_image_delete, rua
|
||||||
|
|
||||||
|
|
||||||
to = on_command("摸摸头", rule=to_me(), priority=10, block=True)
|
to = on_command("摸摸头", rule=to_me(), priority=10, block=True)
|
||||||
|
|
@ -1,160 +0,0 @@
|
||||||
import execjs
|
|
||||||
import requests
|
|
||||||
|
|
||||||
|
|
||||||
cookies = {
|
|
||||||
'NMTID': '00O8y8Jmz580oVUQEj2u8z-CtjK9TAAAAGT_JaiZQ',
|
|
||||||
'_ntes_nnid': '70ee9d950560215d692bbd3bac5f7ffd,1735109551078',
|
|
||||||
'_ntes_nuid': '70ee9d950560215d692bbd3bac5f7ffd',
|
|
||||||
'WM_TID': 'xAl%2FSCq1ZGxFEFQBVUOTDr%2F0kj2cJ4CW',
|
|
||||||
'WEVNSM': '1.0.0',
|
|
||||||
'WNMCID': 'iljzuk.1735109552031.01.0',
|
|
||||||
'ntes_utid': 'tid._.MOPuPUX%252FlRRFVlVFAUbTH7v0liiZp44J._.0',
|
|
||||||
'sDeviceId': 'YD-FPy2uqtGAzpEVwAFRBeVx3xH8QxWMOBV',
|
|
||||||
'__snaker__id': 'z682UZpwWWtLZGly',
|
|
||||||
'ntes_kaola_ad': '1',
|
|
||||||
'_iuqxldmzr_': '32',
|
|
||||||
'P_INFO': '15902053421|1735930696|1|music|00&99|null&null&null#gud&442000#10#0|&0|null|15902053421',
|
|
||||||
'__csrf': 'c9c07b72fc20b640171041342a760e81',
|
|
||||||
'MUSIC_U': '00B2B1E45F4C7D1F42BAC95F16E5D85EB2BFC68BE1BE7C6823C3C28A6304B1AB2D4A94E1D803311EF54D20985FAA383FC5003E895B02096F81188209A3BEB719E3768B01CFBCF587E947206DAA31320E0647B9475A1BBF856DFD117BAC65DD66D4A4DBC3F539F5EBA4544AECE36E35395EE562053591A64212AC8F37F30E2B8C11AB2C10C7C03AACBD5DA91C35703F339B829ABD1C51216EDDA18E9EF905F83E62BBC19376CFB5B17DF0E189C29BDA895578060D86C43BA75D89D69A4DEF267CCA705DFE2E6CA049310812FB57EDD6E4E68CE36AED458717E67246291193F48AB3E5620004ECC2E2A8D841C65D7C1A93926D80855CC9092B7FD29BFC5CAF154CB51BFA95CE76F24C732D1B7C6CFA9829025AA7478406C3B5DDBA76B0EF77E1C0B9839ED41FAAD8ED873F484158243ACC8DE9EF439FE9B018A08B3267CD8DDF0A7BC75F8D0625AB15C0F710471ACBB75B6B0220F283B168FB97899BA53E0A583378',
|
|
||||||
'gdxidpyhxdE': 'dY7CYik9SZysPpbpa%2B9IZ0WkY%2Bf%2BbijCEJvzgRykt3gd21PLr3Ef0Nd7cJ84EZRYl9gaSyIl8MYbGPTbZonYELjmYv%5CiX5Aasgwj92PikIIxp67PCjEU7bIDfjtqO8gYNgmNKUUZfgoi8GSWC2CzIDMuoVeX0aj2E%2Bw3qgPe%2BzIj0gQo%3A1736774883618',
|
|
||||||
'WM_NI': 'xxsz9lwGcCulm7plUDTn8EV4tPXXmBnkvNboMiKwOMaO68vvTGh%2B1%2F8geHL3MiaGz4kBNcL80kPI8L3k%2BIL2fR3rUpxQvjfQB14knTh8XpFASriLyzyWugn%2BZ8IrVmVSS3M%3D',
|
|
||||||
'WM_NIKE': '9ca17ae2e6ffcda170e2e6eebae25ef3bf85b9f14ab5ac8ab7d44b978f8eadcb6998b9a992b3418caca88ed82af0fea7c3b92abca8bd9bbc68b599ada4f868afe9c08dd85098b2f8a6d540b89098b9f04aaeb5baafe1658fb78598ce47a391fad9f57e9899a8ccb425fcb9aba9cf398fb7afa8f940a99e8284cf34f4b5a0aabb48f1b5e5aacf3aa68efd93d87cbc8fba8be55b82effc8ced60ace89891c54b91aea7adfc72bb89bb88ed219ae88793d567968d9dd4d037e2a3',
|
|
||||||
'JSESSIONID-WYYY': 'J1xKzQq7BEfO8faiU7GJrD54bxJC0oUwq8XyduKkEEBj8J8qy2n9Igx5l%2FQsOea4eBHs%2Bph7pHSFbPwTdCK4j6wSqY9BPMeJ828h5SZy4T4Rzx%2FQIrrvZn7ZbvrBwI9eDwd7vo9vOfVY4EIj2TpYdYP%2FTjOf5fzTq%5Ce3gB1a29J0ZyUY%3A1736913831537',
|
|
||||||
'playerid': '81625937',
|
|
||||||
}
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
'accept': '*/*',
|
|
||||||
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
||||||
'cache-control': 'no-cache',
|
|
||||||
# Requests sorts cookies= alphabetically
|
|
||||||
# 'cookie': 'NMTID=00O8y8Jmz580oVUQEj2u8z-CtjK9TAAAAGT_JaiZQ; _ntes_nnid=70ee9d950560215d692bbd3bac5f7ffd,1735109551078; _ntes_nuid=70ee9d950560215d692bbd3bac5f7ffd; WM_TID=xAl%2FSCq1ZGxFEFQBVUOTDr%2F0kj2cJ4CW; WEVNSM=1.0.0; WNMCID=iljzuk.1735109552031.01.0; ntes_utid=tid._.MOPuPUX%252FlRRFVlVFAUbTH7v0liiZp44J._.0; sDeviceId=YD-FPy2uqtGAzpEVwAFRBeVx3xH8QxWMOBV; __snaker__id=z682UZpwWWtLZGly; ntes_kaola_ad=1; _iuqxldmzr_=32; P_INFO=15902053421|1735930696|1|music|00&99|null&null&null#gud&442000#10#0|&0|null|15902053421; __csrf=c9c07b72fc20b640171041342a760e81; MUSIC_U=00B2B1E45F4C7D1F42BAC95F16E5D85EB2BFC68BE1BE7C6823C3C28A6304B1AB2D4A94E1D803311EF54D20985FAA383FC5003E895B02096F81188209A3BEB719E3768B01CFBCF587E947206DAA31320E0647B9475A1BBF856DFD117BAC65DD66D4A4DBC3F539F5EBA4544AECE36E35395EE562053591A64212AC8F37F30E2B8C11AB2C10C7C03AACBD5DA91C35703F339B829ABD1C51216EDDA18E9EF905F83E62BBC19376CFB5B17DF0E189C29BDA895578060D86C43BA75D89D69A4DEF267CCA705DFE2E6CA049310812FB57EDD6E4E68CE36AED458717E67246291193F48AB3E5620004ECC2E2A8D841C65D7C1A93926D80855CC9092B7FD29BFC5CAF154CB51BFA95CE76F24C732D1B7C6CFA9829025AA7478406C3B5DDBA76B0EF77E1C0B9839ED41FAAD8ED873F484158243ACC8DE9EF439FE9B018A08B3267CD8DDF0A7BC75F8D0625AB15C0F710471ACBB75B6B0220F283B168FB97899BA53E0A583378; gdxidpyhxdE=dY7CYik9SZysPpbpa%2B9IZ0WkY%2Bf%2BbijCEJvzgRykt3gd21PLr3Ef0Nd7cJ84EZRYl9gaSyIl8MYbGPTbZonYELjmYv%5CiX5Aasgwj92PikIIxp67PCjEU7bIDfjtqO8gYNgmNKUUZfgoi8GSWC2CzIDMuoVeX0aj2E%2Bw3qgPe%2BzIj0gQo%3A1736774883618; WM_NI=xxsz9lwGcCulm7plUDTn8EV4tPXXmBnkvNboMiKwOMaO68vvTGh%2B1%2F8geHL3MiaGz4kBNcL80kPI8L3k%2BIL2fR3rUpxQvjfQB14knTh8XpFASriLyzyWugn%2BZ8IrVmVSS3M%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eebae25ef3bf85b9f14ab5ac8ab7d44b978f8eadcb6998b9a992b3418caca88ed82af0fea7c3b92abca8bd9bbc68b599ada4f868afe9c08dd85098b2f8a6d540b89098b9f04aaeb5baafe1658fb78598ce47a391fad9f57e9899a8ccb425fcb9aba9cf398fb7afa8f940a99e8284cf34f4b5a0aabb48f1b5e5aacf3aa68efd93d87cbc8fba8be55b82effc8ced60ace89891c54b91aea7adfc72bb89bb88ed219ae88793d567968d9dd4d037e2a3; JSESSIONID-WYYY=J1xKzQq7BEfO8faiU7GJrD54bxJC0oUwq8XyduKkEEBj8J8qy2n9Igx5l%2FQsOea4eBHs%2Bph7pHSFbPwTdCK4j6wSqY9BPMeJ828h5SZy4T4Rzx%2FQIrrvZn7ZbvrBwI9eDwd7vo9vOfVY4EIj2TpYdYP%2FTjOf5fzTq%5Ce3gB1a29J0ZyUY%3A1736913831537; playerid=81625937',
|
|
||||||
'origin': 'https://music.163.com',
|
|
||||||
'pragma': 'no-cache',
|
|
||||||
'priority': 'u=1, i',
|
|
||||||
'referer': 'https://music.163.com/',
|
|
||||||
'sec-ch-ua': '"Microsoft Edge";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
|
|
||||||
'sec-ch-ua-mobile': '?0',
|
|
||||||
'sec-ch-ua-platform': '"Windows"',
|
|
||||||
'sec-fetch-dest': 'empty',
|
|
||||||
'sec-fetch-mode': 'cors',
|
|
||||||
'sec-fetch-site': 'same-origin',
|
|
||||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0',
|
|
||||||
}
|
|
||||||
|
|
||||||
params = {
|
|
||||||
'csrf_token': 'c9c07b72fc20b640171041342a760e81',
|
|
||||||
}
|
|
||||||
|
|
||||||
data = {
|
|
||||||
'params': 'nvRE14quU2f1ge3FCmBfGqo3PAkgmLPWQYSjX5TTa6o3CSSvGGdecBNdLzvNymhfUyVDR6ZjboRjxOp0OaqzoXXbJUb085o+yJZWUt/+U7uBLM+zyYaAZBpSJk5wE30wJZ+/Y/NC0BDuN4lB7K+QR6VaUNly7hIk0trvh+DITgsoQqdKDie7C+EqFNEVYan9LoKVikJjaPFJAxBGtDZWrQ==',
|
|
||||||
'encSecKey': '27dba2f08b7025a9f62b326292dfc4975cb5d1c46d524ae2bd7a0f4e47ff60acdc5f22a99cab75a2a38083fa264b618ebdcded209c1f8d167d4e62205795bb4fb367db862644489bdef6266508a6c285b2e793968e02c856a13285c7ec7d7a8c2984ae70257ec721aa674a6c64f62cbb17535c07b4378dc2a95f7e48553e8db7',
|
|
||||||
}
|
|
||||||
|
|
||||||
f = open('../../music/cloud_music/param.js', 'r', encoding='utf-8').read()
|
|
||||||
ctx = execjs.compile(f)
|
|
||||||
result = ctx.call('get_music', '1357375695')
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
data = {
|
|
||||||
'params': result['encText'],
|
|
||||||
'encSecKey': result['encSecKey'],
|
|
||||||
}
|
|
||||||
|
|
||||||
response = requests.post('https://music.163.com/weapi/song/enhance/player/url/v1', params=params, cookies=cookies, headers=headers,
|
|
||||||
data=data)
|
|
||||||
print(response.text)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# 判断cookie是否有效
|
|
||||||
def netease_cloud_music_is_login(session):
|
|
||||||
try:
|
|
||||||
session.cookies.load(ignore_discard=True)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
csrf_token = session.cookies.get('__csrf')
|
|
||||||
c = str({'csrf_token': csrf_token})
|
|
||||||
try:
|
|
||||||
loginurl = session.post(
|
|
||||||
'https://music.163.com/weapi/w/nuser/account/get?csrf_token={}'.format(csrf_token),
|
|
||||||
data={
|
|
||||||
'params': AES_aes(AES_aes(c,g,iv),i,iv),
|
|
||||||
'encSecKey': encSecKey()},
|
|
||||||
headers=headers).json()
|
|
||||||
if '200' in str(loginurl['code']):
|
|
||||||
print('Cookies值有效:', loginurl['profile']['nickname'], ',已登录!')
|
|
||||||
return session, True
|
|
||||||
else:
|
|
||||||
print('Cookies值已经失效,请重新扫码登录!')
|
|
||||||
return session, False
|
|
||||||
except BaseException:
|
|
||||||
print('Cookies值已经失效,请重新扫码登录!')
|
|
||||||
return session, False
|
|
||||||
|
|
||||||
|
|
||||||
# 登录扫码保存cookie
|
|
||||||
def netease_cloud_music_login():
|
|
||||||
# 写入
|
|
||||||
session = requests.session()
|
|
||||||
if not os.path.exists('cloud_music_cookies.cookie'):
|
|
||||||
with open('cloud_music_cookies.cookie', 'wb') as f:
|
|
||||||
pickle.dump(session.cookies, f)
|
|
||||||
# 读取
|
|
||||||
session.cookies = pickle.load(open('cloud_music_cookies.cookie', 'rb'))
|
|
||||||
session, status = netease_cloud_music_is_login(session)
|
|
||||||
if not status:
|
|
||||||
getlogin = session.post( 'https://music.163.com/weapi/login/qrcode/unikey?csrf_token=',
|
|
||||||
data={
|
|
||||||
'params': params(None),
|
|
||||||
'encSecKey': encSecKey()
|
|
||||||
},
|
|
||||||
headers=headers).json()
|
|
||||||
pngurl = 'https://music.163.com/login?codekey=' + getlogin['unikey'] + '&refer=scan'
|
|
||||||
|
|
||||||
qr = qrcode.QRCode()
|
|
||||||
qr.add_data(pngurl)
|
|
||||||
img = qr.make_image()
|
|
||||||
a = BytesIO()
|
|
||||||
img.save(a, 'png')
|
|
||||||
png = a.getvalue()
|
|
||||||
a.close()
|
|
||||||
# 打开二维码进行扫码操作
|
|
||||||
t = showpng(png)
|
|
||||||
t.start()
|
|
||||||
|
|
||||||
tokenurl = 'https://music.163.com/weapi/login/qrcode/client/login?csrf_token='
|
|
||||||
while True:
|
|
||||||
u = str({'key': getlogin['unikey'], 'type': "1", 'csrf_token': ""})
|
|
||||||
qrcodedata = session.post(
|
|
||||||
tokenurl,
|
|
||||||
data={
|
|
||||||
'params': params(u),
|
|
||||||
'encSecKey': encSecKey()
|
|
||||||
},
|
|
||||||
headers=headers).json()
|
|
||||||
if '801' in str(qrcodedata['code']):
|
|
||||||
print('二维码未失效,请扫码!')
|
|
||||||
elif '802' in str(qrcodedata['code']):
|
|
||||||
print('已扫码,请确认!')
|
|
||||||
elif '803' in str(qrcodedata['code']):
|
|
||||||
print('已确认,登入成功!')
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
print('其他:', qrcodedata)
|
|
||||||
time.sleep(2)
|
|
||||||
with open('cloud_music_cookies.cookie', 'wb') as f:
|
|
||||||
pickle.dump(session.cookies, f)
|
|
||||||
return session
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
netease_cloud_music_login()
|
|
||||||
|
|
||||||
"""
|
|
||||||
0
src/resources/temp/temp
Normal file
0
src/resources/temp/temp
Normal file
Loading…
Reference in a new issue