mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-07 21:00:21 +08:00
Merge branch 'dev' into dev
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
SUPERUSERS=[""]
|
SUPERUSERS=[""]
|
||||||
|
|
||||||
COMMAND_START=[""]
|
COMMAND_START=[""]
|
||||||
@@ -13,6 +11,16 @@ SESSION_EXPIRE_TIMEOUT=30
|
|||||||
# 全局图片统一使用bytes发送,当真寻与协议端不在同一服务器上时为True
|
# 全局图片统一使用bytes发送,当真寻与协议端不在同一服务器上时为True
|
||||||
IMAGE_TO_BYTES = False
|
IMAGE_TO_BYTES = False
|
||||||
|
|
||||||
|
# 回复消息时自称
|
||||||
|
SELF_NICKNAME="小真寻"
|
||||||
|
|
||||||
|
# 数据库配置
|
||||||
|
# 示例: "postgres://user:password@127.0.0.1:5432/database"
|
||||||
|
DB_URL = ""
|
||||||
|
|
||||||
|
# 系统代理
|
||||||
|
# SYSTEM_PROXY = "http://127.0.0.1:7890"
|
||||||
|
|
||||||
PLATFORM_SUPERUSERS = '
|
PLATFORM_SUPERUSERS = '
|
||||||
{
|
{
|
||||||
"qq": [""],
|
"qq": [""],
|
||||||
@@ -22,6 +30,12 @@ PLATFORM_SUPERUSERS = '
|
|||||||
|
|
||||||
DRIVER=~fastapi+~httpx+~websockets
|
DRIVER=~fastapi+~httpx+~websockets
|
||||||
|
|
||||||
|
|
||||||
|
# LOG_LEVEL=DEBUG
|
||||||
|
# 服务器和端口
|
||||||
|
HOST = 127.0.0.1
|
||||||
|
PORT = 8080
|
||||||
|
|
||||||
# kook adapter toekn
|
# kook adapter toekn
|
||||||
# kaiheila_bots =[{"token": ""}]
|
# kaiheila_bots =[{"token": ""}]
|
||||||
|
|
||||||
@@ -51,11 +65,4 @@ DRIVER=~fastapi+~httpx+~websockets
|
|||||||
# '
|
# '
|
||||||
|
|
||||||
# application_commands的{"*": ["*"]}代表将全部应用命令注册为全局应用命令
|
# application_commands的{"*": ["*"]}代表将全部应用命令注册为全局应用命令
|
||||||
# {"admin": ["123", "456"]}则代表将admin命令注册为id是123、456服务器的局部命令,其余命令不注册
|
# {"admin": ["123", "456"]}则代表将admin命令注册为id是123、456服务器的局部命令,其余命令不注册
|
||||||
|
|
||||||
# LOG_LEVEL=DEBUG
|
|
||||||
# 服务器和端口
|
|
||||||
HOST = 127.0.0.1
|
|
||||||
PORT = 8080
|
|
||||||
|
|
||||||
|
|
||||||
@@ -5,9 +5,10 @@ from nonebot.adapters.dodo import Adapter as DoDoAdapter
|
|||||||
from nonebot.adapters.kaiheila import Adapter as KaiheilaAdapter
|
from nonebot.adapters.kaiheila import Adapter as KaiheilaAdapter
|
||||||
from nonebot.adapters.onebot.v11 import Adapter as OneBotV11Adapter
|
from nonebot.adapters.onebot.v11 import Adapter as OneBotV11Adapter
|
||||||
|
|
||||||
|
nonebot.init()
|
||||||
|
|
||||||
from zhenxun.services.db_context import disconnect, init
|
from zhenxun.services.db_context import disconnect, init
|
||||||
|
|
||||||
nonebot.init()
|
|
||||||
driver = nonebot.get_driver()
|
driver = nonebot.get_driver()
|
||||||
driver.register_adapter(OneBotV11Adapter)
|
driver.register_adapter(OneBotV11Adapter)
|
||||||
driver.register_adapter(KaiheilaAdapter)
|
driver.register_adapter(KaiheilaAdapter)
|
||||||
@@ -18,7 +19,7 @@ driver.register_adapter(DoDoAdapter)
|
|||||||
driver.on_startup(init)
|
driver.on_startup(init)
|
||||||
driver.on_shutdown(disconnect)
|
driver.on_shutdown(disconnect)
|
||||||
|
|
||||||
nonebot.load_builtin_plugins("echo") # 内置插件
|
# nonebot.load_builtin_plugins("echo")
|
||||||
nonebot.load_plugins("zhenxun/builtin_plugins")
|
nonebot.load_plugins("zhenxun/builtin_plugins")
|
||||||
nonebot.load_plugins("zhenxun/plugins")
|
nonebot.load_plugins("zhenxun/plugins")
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,10 @@ body {
|
|||||||
margin-top: 43px;
|
margin-top: 43px;
|
||||||
margin-left: 30px;
|
margin-left: 30px;
|
||||||
font-size: 47px;
|
font-size: 47px;
|
||||||
|
height: 57px;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
display: flex
|
||||||
}
|
}
|
||||||
|
|
||||||
.uid {
|
.uid {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<img class="avatar-img" src="{{data.ava}}" alt="">
|
<img class="avatar-img" src="{{data.ava}}" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div style="position: relative;">
|
<div style="position: relative;">
|
||||||
<p class="nickname">{{data.name}}</p>
|
<p class="nickname" style="font-size: {{ data.font_size }}px;">{{data.name}}</p>
|
||||||
<p class="uid">UID:{{data.uid}}</p>
|
<p class="uid">UID:{{data.uid}}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<img class="rl-img" class="avatar-img" src="res/img/rl.png" alt="">
|
<img class="rl-img" class="avatar-img" src="res/img/rl.png" alt="">
|
||||||
<img class="zx-img" class="avatar-img" src="res/img/1.png" alt="">
|
<img class="zx-img" class="avatar-img" src="res/img/1.png" alt="">
|
||||||
<p class="text-day">累计签到{{data.sign_count}}天</p>
|
<p class="text-day">累计签到{{data.sign_count}}天</p>
|
||||||
<p class="text-zx">真寻说: {{data.message}}</p>
|
<p class="text-zx">{{data.message}}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sign-data">
|
<div class="sign-data">
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="bot-text">
|
<div class="bot-text">
|
||||||
<p style="position: absolute; top: 9px">好感度等级: {{data.level}}</p>
|
<p style="position: absolute; top: 9px">好感度等级: {{data.level}}</p>
|
||||||
<p style="position: absolute; top: 58px">小真寻对你的态度: {{data.attitude}}</p>
|
<p style="position: absolute; top: 58px">{{data.attitude}}</p>
|
||||||
<p style="position: absolute; top: 111px"">距离升级还差{{data.interpolation}}好感度</p>
|
<p style="position: absolute; top: 111px"">距离升级还差{{data.interpolation}}好感度</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="progress-border">
|
<div class="progress-border">
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from nonebot_plugin_alconna import Alconna, Arparma, on_alconna
|
|||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginExtraData
|
from zhenxun.configs.utils import PluginExtraData
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.enum import PluginType
|
from zhenxun.utils.enum import PluginType
|
||||||
@@ -62,7 +62,7 @@ async def _(bot: Bot, event: GroupIncreaseNoticeEvent):
|
|||||||
if str(event.user_id) == bot.self_id:
|
if str(event.user_id) == bot.self_id:
|
||||||
await MemberUpdateManage.update(bot, str(event.group_id))
|
await MemberUpdateManage.update(bot, str(event.group_id))
|
||||||
logger.info(
|
logger.info(
|
||||||
f"{NICKNAME}加入群聊更新群组信息",
|
f"{BotConfig.self_nickname}加入群聊更新群组信息",
|
||||||
"更新群组成员列表",
|
"更新群组成员列表",
|
||||||
session=event.user_id,
|
session=event.user_id,
|
||||||
group_id=event.group_id,
|
group_id=event.group_id,
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
import subprocess
|
||||||
import tarfile
|
import tarfile
|
||||||
import zipfile
|
import zipfile
|
||||||
import subprocess
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from nonebot.adapters import Bot
|
from nonebot.adapters import Bot
|
||||||
@@ -21,24 +21,34 @@ from .config import (
|
|||||||
MAIN_URL,
|
MAIN_URL,
|
||||||
PYPROJECT_FILE,
|
PYPROJECT_FILE,
|
||||||
PYPROJECT_LOCK_FILE,
|
PYPROJECT_LOCK_FILE,
|
||||||
REQ_TXT_FILE,
|
|
||||||
RELEASE_URL,
|
RELEASE_URL,
|
||||||
REPLACE_FOLDERS,
|
REPLACE_FOLDERS,
|
||||||
|
REQ_TXT_FILE,
|
||||||
TMP_PATH,
|
TMP_PATH,
|
||||||
VERSION_FILE,
|
VERSION_FILE,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def install_requirement():
|
def install_requirement():
|
||||||
requirement_path = (Path() / "requirements.txt").absolute()
|
requirement_path = (Path() / "requirements.txt").absolute()
|
||||||
|
|
||||||
if not requirement_path.exists():
|
if not requirement_path.exists():
|
||||||
logger.debug(f"没有找到zhenxun的requirement.txt,目标路径为{requirement_path}", "插件管理")
|
logger.debug(
|
||||||
|
f"没有找到zhenxun的requirement.txt,目标路径为{requirement_path}", "插件管理"
|
||||||
|
)
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(["pip", "install", "-r", str(requirement_path)], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
result = subprocess.run(
|
||||||
|
["pip", "install", "-r", str(requirement_path)],
|
||||||
|
check=True,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
logger.debug(f"成功安装真寻依赖,日志:\n{result.stdout}", "插件管理")
|
logger.debug(f"成功安装真寻依赖,日志:\n{result.stdout}", "插件管理")
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
logger.error(f"安装真寻依赖失败,错误:\n{e.stderr}")
|
logger.error(f"安装真寻依赖失败,错误:\n{e.stderr}", "插件管理", e=e)
|
||||||
|
|
||||||
|
|
||||||
@run_sync
|
@run_sync
|
||||||
def _file_handle(latest_version: str | None):
|
def _file_handle(latest_version: str | None):
|
||||||
@@ -120,6 +130,7 @@ def _file_handle(latest_version: str | None):
|
|||||||
f.write(f"__version__: {latest_version}")
|
f.write(f"__version__: {latest_version}")
|
||||||
install_requirement()
|
install_requirement()
|
||||||
|
|
||||||
|
|
||||||
class UpdateManage:
|
class UpdateManage:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -22,4 +22,11 @@ BACKUP_PATH = Path() / "backup"
|
|||||||
DOWNLOAD_GZ_FILE = TMP_PATH / "download_latest_file.tar.gz"
|
DOWNLOAD_GZ_FILE = TMP_PATH / "download_latest_file.tar.gz"
|
||||||
DOWNLOAD_ZIP_FILE = TMP_PATH / "download_latest_file.zip"
|
DOWNLOAD_ZIP_FILE = TMP_PATH / "download_latest_file.zip"
|
||||||
|
|
||||||
REPLACE_FOLDERS = ["builtin_plugins", "plugins", "services", "utils", "models"]
|
REPLACE_FOLDERS = [
|
||||||
|
"builtin_plugins",
|
||||||
|
"plugins",
|
||||||
|
"services",
|
||||||
|
"utils",
|
||||||
|
"models",
|
||||||
|
"configs",
|
||||||
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from nonebot_plugin_alconna import Alconna, Option, on_alconna, store_true
|
|||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
from nonebot_plugin_userinfo import EventUserInfo, UserInfo
|
from nonebot_plugin_userinfo import EventUserInfo, UserInfo
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
||||||
from zhenxun.models.ban_console import BanConsole
|
from zhenxun.models.ban_console import BanConsole
|
||||||
from zhenxun.models.friend_user import FriendUser
|
from zhenxun.models.friend_user import FriendUser
|
||||||
@@ -24,11 +24,11 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
name="昵称系统",
|
name="昵称系统",
|
||||||
description="区区昵称,才不想叫呢!",
|
description="区区昵称,才不想叫呢!",
|
||||||
usage=f"""
|
usage=f"""
|
||||||
个人昵称,将替换{NICKNAME}称呼你的名称,群聊 与 私聊 昵称相互独立,全局昵称设置将更改您目前所有群聊中及私聊的昵称
|
个人昵称,将替换{BotConfig.self_nickname}称呼你的名称,群聊 与 私聊 昵称相互独立,全局昵称设置将更改您目前所有群聊中及私聊的昵称
|
||||||
指令:
|
指令:
|
||||||
以后叫我 [昵称]: 设置当前群聊/私聊的昵称
|
以后叫我 [昵称]: 设置当前群聊/私聊的昵称
|
||||||
全局昵称设置 [昵称]: 设置当前所有群聊和私聊的昵称
|
全局昵称设置 [昵称]: 设置当前所有群聊和私聊的昵称
|
||||||
{NICKNAME}我是谁
|
{BotConfig.self_nickname}我是谁
|
||||||
""".strip(),
|
""".strip(),
|
||||||
extra=PluginExtraData(
|
extra=PluginExtraData(
|
||||||
author="HibiKier",
|
author="HibiKier",
|
||||||
@@ -86,25 +86,25 @@ _matcher.shortcut(
|
|||||||
|
|
||||||
CALL_NAME = [
|
CALL_NAME = [
|
||||||
"好啦好啦,我知道啦,{},以后就这么叫你吧",
|
"好啦好啦,我知道啦,{},以后就这么叫你吧",
|
||||||
f"嗯嗯,{NICKNAME}" + "记住你的昵称了哦,{}",
|
f"嗯嗯,{BotConfig.self_nickname}" + "记住你的昵称了哦,{}",
|
||||||
"好突然,突然要叫你昵称什么的...{}..",
|
"好突然,突然要叫你昵称什么的...{}..",
|
||||||
f"{NICKNAME}" + "会好好记住{}的,放心吧",
|
f"{BotConfig.self_nickname}" + "会好好记住{}的,放心吧",
|
||||||
"好..好.,那窝以后就叫你{}了.",
|
"好..好.,那窝以后就叫你{}了.",
|
||||||
]
|
]
|
||||||
|
|
||||||
REMIND = [
|
REMIND = [
|
||||||
"我肯定记得你啊,你是{}啊",
|
"我肯定记得你啊,你是{}啊",
|
||||||
"我不会忘记你的,你也不要忘记我!{}",
|
"我不会忘记你的,你也不要忘记我!{}",
|
||||||
f"哼哼,{NICKNAME}" + "记忆力可是很好的,{}",
|
f"哼哼,{BotConfig.self_nickname}" + "记忆力可是很好的,{}",
|
||||||
"嗯?你是失忆了嘛...{}..",
|
"嗯?你是失忆了嘛...{}..",
|
||||||
f"不要小看{NICKNAME}" + "的记忆力啊!笨蛋{}!QAQ",
|
f"不要小看{BotConfig.self_nickname}" + "的记忆力啊!笨蛋{}!QAQ",
|
||||||
"哎?{}..怎么了吗..突然这样问..",
|
"哎?{}..怎么了吗..突然这样问..",
|
||||||
]
|
]
|
||||||
|
|
||||||
CANCEL = [
|
CANCEL = [
|
||||||
f"呜..{NICKNAME}" + "睡一觉就会忘记的..和梦一样..{}",
|
f"呜..{BotConfig.self_nickname}" + "睡一觉就会忘记的..和梦一样..{}",
|
||||||
"窝知道了..{}..",
|
"窝知道了..{}..",
|
||||||
f"是{NICKNAME}" + "哪里做的不好嘛..好吧..晚安{}",
|
f"是{BotConfig.self_nickname}" + "哪里做的不好嘛..好吧..晚安{}",
|
||||||
"呃,{},下次我绝对绝对绝对不会再忘记你!",
|
"呃,{},下次我绝对绝对绝对不会再忘记你!",
|
||||||
"可..可恶!{}!太可恶了!呜",
|
"可..可恶!{}!太可恶了!呜",
|
||||||
]
|
]
|
||||||
@@ -152,9 +152,9 @@ def CheckNickname():
|
|||||||
logger.debug(
|
logger.debug(
|
||||||
"昵称设置禁止字符: [{word}]", "昵称设置", session=session
|
"昵称设置禁止字符: [{word}]", "昵称设置", session=session
|
||||||
)
|
)
|
||||||
await MessageUtils.build_message(f"字符 [{x}] 为禁止字符!").finish(
|
await MessageUtils.build_message(
|
||||||
at_sender=True
|
f"字符 [{word}] 为禁止字符!"
|
||||||
)
|
).finish(at_sender=True)
|
||||||
|
|
||||||
return Depends(dependency)
|
return Depends(dependency)
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from nonebot.adapters.onebot.v12 import (
|
|||||||
from nonebot.plugin import PluginMetadata
|
from nonebot.plugin import PluginMetadata
|
||||||
from nonebot_plugin_alconna import At
|
from nonebot_plugin_alconna import At
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH
|
from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH
|
||||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig, Task
|
from zhenxun.configs.utils import PluginExtraData, RegisterConfig, Task
|
||||||
from zhenxun.models.fg_request import FgRequest
|
from zhenxun.models.fg_request import FgRequest
|
||||||
@@ -44,7 +44,7 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
RegisterConfig(
|
RegisterConfig(
|
||||||
module="invite_manager",
|
module="invite_manager",
|
||||||
key="message",
|
key="message",
|
||||||
value=f"请不要未经同意就拉{NICKNAME}入群!告辞!",
|
value=f"请不要未经同意就拉{BotConfig.self_nickname}入群!告辞!",
|
||||||
help="强制拉群后进群回复的内容",
|
help="强制拉群后进群回复的内容",
|
||||||
),
|
),
|
||||||
RegisterConfig(
|
RegisterConfig(
|
||||||
@@ -88,8 +88,6 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
superuser = nonebot.get_driver().config.platform_superusers["qq"][0]
|
|
||||||
|
|
||||||
base_config = Config.get("invite_manager")
|
base_config = Config.get("invite_manager")
|
||||||
|
|
||||||
|
|
||||||
@@ -108,6 +106,7 @@ add_group = on_request(priority=1, block=False)
|
|||||||
|
|
||||||
@group_increase_handle.handle()
|
@group_increase_handle.handle()
|
||||||
async def _(bot: Bot, event: GroupIncreaseNoticeEvent | GroupMemberIncreaseEvent):
|
async def _(bot: Bot, event: GroupIncreaseNoticeEvent | GroupMemberIncreaseEvent):
|
||||||
|
superuser = BotConfig.get_superuser("qq")
|
||||||
user_id = str(event.user_id)
|
user_id = str(event.user_id)
|
||||||
group_id = str(event.group_id)
|
group_id = str(event.group_id)
|
||||||
if user_id == bot.self_id:
|
if user_id == bot.self_id:
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
import nonebot
|
import nonebot
|
||||||
import ujson as json
|
import ujson as json
|
||||||
@@ -89,15 +90,27 @@ def install_requirement(plugin_path: Path):
|
|||||||
requirement_path = plugin_path / "requirement.txt"
|
requirement_path = plugin_path / "requirement.txt"
|
||||||
|
|
||||||
if not requirement_path.exists():
|
if not requirement_path.exists():
|
||||||
logger.debug(f"No requirement.txt found for plugin: {plugin_path.name}", "插件管理")
|
logger.debug(
|
||||||
|
f"No requirement.txt found for plugin: {plugin_path.name}", "插件管理"
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(["pip", "install", "-r", str(requirement_path)],
|
result = subprocess.run(
|
||||||
check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
["pip", "install", "-r", str(requirement_path)],
|
||||||
logger.debug(f"Successfully installed dependencies for plugin: {plugin_path.name}. Output:\n{result.stdout}", "插件管理")
|
check=True,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
logger.debug(
|
||||||
|
f"Successfully installed dependencies for plugin: {plugin_path.name}. Output:\n{result.stdout}",
|
||||||
|
"插件管理",
|
||||||
|
)
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
logger.error(f"Failed to install dependencies for plugin: {plugin_path.name}. Error:\n{e.stderr}")
|
logger.error(
|
||||||
|
f"Failed to install dependencies for plugin: {plugin_path.name}. Error:\n{e.stderr}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ShopManage:
|
class ShopManage:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from nonebot.plugin import PluginMetadata
|
|||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
||||||
from zhenxun.models.fg_request import FgRequest
|
from zhenxun.models.fg_request import FgRequest
|
||||||
from zhenxun.models.friend_user import FriendUser
|
from zhenxun.models.friend_user import FriendUser
|
||||||
@@ -69,7 +69,7 @@ _t = on_message(priority=999, block=False, rule=lambda: False)
|
|||||||
|
|
||||||
@friend_req.handle()
|
@friend_req.handle()
|
||||||
async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSession):
|
async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSession):
|
||||||
superuser = nonebot.get_driver().config.platform_superusers["qq"][0]
|
superuser = BotConfig.get_superuser("qq")
|
||||||
if event.user_id and Timer.check(event.user_id):
|
if event.user_id and Timer.check(event.user_id):
|
||||||
logger.debug(f"收录好友请求...", "好友请求", target=event.user_id)
|
logger.debug(f"收录好友请求...", "好友请求", target=event.user_id)
|
||||||
user = await bot.get_stranger_info(user_id=event.user_id)
|
user = await bot.get_stranger_info(user_id=event.user_id)
|
||||||
@@ -78,7 +78,6 @@ async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSessi
|
|||||||
# age = str(user["age"])
|
# age = str(user["age"])
|
||||||
comment = event.comment
|
comment = event.comment
|
||||||
if superuser:
|
if superuser:
|
||||||
superuser = int(superuser)
|
|
||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
f"*****一份好友申请*****\n"
|
f"*****一份好友申请*****\n"
|
||||||
f"昵称:{nickname}({event.user_id})\n"
|
f"昵称:{nickname}({event.user_id})\n"
|
||||||
@@ -118,7 +117,7 @@ async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSessi
|
|||||||
|
|
||||||
@group_req.handle()
|
@group_req.handle()
|
||||||
async def _(bot: v12Bot | v11Bot, event: GroupRequestEvent, session: EventSession):
|
async def _(bot: v12Bot | v11Bot, event: GroupRequestEvent, session: EventSession):
|
||||||
superuser = nonebot.get_driver().config.platform_superusers["qq"][0]
|
superuser = BotConfig.get_superuser("qq")
|
||||||
# 邀请
|
# 邀请
|
||||||
if event.sub_type == "invite":
|
if event.sub_type == "invite":
|
||||||
if str(event.user_id) in bot.config.superusers:
|
if str(event.user_id) in bot.config.superusers:
|
||||||
@@ -165,15 +164,14 @@ async def _(bot: v12Bot | v11Bot, event: GroupRequestEvent, session: EventSessio
|
|||||||
target=event.group_id,
|
target=event.group_id,
|
||||||
)
|
)
|
||||||
nickname = await FriendUser.get_user_name(str(event.user_id))
|
nickname = await FriendUser.get_user_name(str(event.user_id))
|
||||||
await Text(
|
await PlatformUtils.send_superuser(
|
||||||
f"*****一份入群申请*****\n"
|
bot,
|
||||||
f"申请人:{nickname}({event.user_id})\n"
|
f"*****一份入群申请*****\n申请人:{nickname}({event.user_id})\n群聊:{event.group_id}\n邀请日期:{datetime.now().replace(microsecond=0)}",
|
||||||
f"群聊:{event.group_id}\n"
|
superuser,
|
||||||
f"邀请日期:{datetime.now().replace(microsecond=0)}"
|
)
|
||||||
).send_to(target=TargetQQPrivate(user_id=superuser), bot=bot)
|
|
||||||
await bot.send_private_msg(
|
await bot.send_private_msg(
|
||||||
user_id=event.user_id,
|
user_id=event.user_id,
|
||||||
message=f"想要邀请我偷偷入群嘛~已经提醒{NICKNAME}的管理员大人了\n"
|
message=f"想要邀请我偷偷入群嘛~已经提醒{BotConfig.self_nickname}的管理员大人了\n"
|
||||||
"请确保已经群主或群管理沟通过!\n"
|
"请确保已经群主或群管理沟通过!\n"
|
||||||
"等待管理员处理吧!",
|
"等待管理员处理吧!",
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from nonebot.plugin import PluginMetadata
|
|||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginExtraData
|
from zhenxun.configs.utils import PluginExtraData
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.enum import PluginType
|
from zhenxun.utils.enum import PluginType
|
||||||
@@ -48,11 +48,13 @@ RESTART_FILE = Path() / "restart.sh"
|
|||||||
|
|
||||||
@_matcher.got(
|
@_matcher.got(
|
||||||
"flag",
|
"flag",
|
||||||
prompt=f"确定是否重启{NICKNAME}?确定请回复[是|好|确定](重启失败咱们将失去联系,请谨慎!)",
|
prompt=f"确定是否重启{BotConfig.self_nickname}?确定请回复[是|好|确定](重启失败咱们将失去联系,请谨慎!)",
|
||||||
)
|
)
|
||||||
async def _(bot: Bot, session: EventSession, flag: str = ArgStr("flag")):
|
async def _(bot: Bot, session: EventSession, flag: str = ArgStr("flag")):
|
||||||
if flag.lower() in ["true", "是", "好", "确定", "确定是"]:
|
if flag.lower() in ["true", "是", "好", "确定", "确定是"]:
|
||||||
await MessageUtils.build_message(f"开始重启{NICKNAME}..请稍等...").send()
|
await MessageUtils.build_message(
|
||||||
|
f"开始重启{BotConfig.self_nickname}..请稍等..."
|
||||||
|
).send()
|
||||||
with open(RESTART_MARK, "w", encoding="utf8") as f:
|
with open(RESTART_MARK, "w", encoding="utf8") as f:
|
||||||
f.write(f"{bot.self_id} {session.id1}")
|
f.write(f"{bot.self_id} {session.id1}")
|
||||||
logger.info("开始重启真寻...", "重启", session=session)
|
logger.info("开始重启真寻...", "重启", session=session)
|
||||||
@@ -90,7 +92,7 @@ async def _(bot: Bot):
|
|||||||
bot_id, session_id = f.read().split()
|
bot_id, session_id = f.read().split()
|
||||||
if bot := nonebot.get_bot(bot_id):
|
if bot := nonebot.get_bot(bot_id):
|
||||||
if target := PlatformUtils.get_target(bot, session_id):
|
if target := PlatformUtils.get_target(bot, session_id):
|
||||||
await MessageUtils.build_message(f"{NICKNAME}已成功重启!").send(
|
await MessageUtils.build_message(
|
||||||
target, bot=bot
|
f"{BotConfig.self_nickname}已成功重启!"
|
||||||
)
|
).send(target, bot=bot)
|
||||||
RESTART_MARK.unlink()
|
RESTART_MARK.unlink()
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import nonebot
|
|||||||
from nonebot.plugin import PluginMetadata
|
from nonebot.plugin import PluginMetadata
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.path_config import IMAGE_PATH
|
from zhenxun.configs.path_config import IMAGE_PATH
|
||||||
from zhenxun.configs.utils import PluginExtraData, Task
|
from zhenxun.configs.utils import PluginExtraData, Task
|
||||||
from zhenxun.models.task_info import TaskInfo
|
from zhenxun.models.task_info import TaskInfo
|
||||||
@@ -60,7 +60,10 @@ async def _():
|
|||||||
)
|
)
|
||||||
async def _():
|
async def _():
|
||||||
message = MessageUtils.build_message(
|
message = MessageUtils.build_message(
|
||||||
[f"{NICKNAME}要睡觉了,你们也要早点睡呀", IMAGE_PATH / "zhenxun" / "sleep.jpg"]
|
[
|
||||||
|
f"{BotConfig.self_nickname}要睡觉了,你们也要早点睡呀",
|
||||||
|
IMAGE_PATH / "zhenxun" / "sleep.jpg",
|
||||||
|
]
|
||||||
)
|
)
|
||||||
await broadcast_group(
|
await broadcast_group(
|
||||||
message,
|
message,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import pytz
|
|||||||
from nonebot.drivers import Driver
|
from nonebot.drivers import Driver
|
||||||
from nonebot_plugin_htmlrender import template_to_pic
|
from nonebot_plugin_htmlrender import template_to_pic
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.path_config import IMAGE_PATH, TEMPLATE_PATH
|
from zhenxun.configs.path_config import IMAGE_PATH, TEMPLATE_PATH
|
||||||
from zhenxun.models.sign_log import SignLog
|
from zhenxun.models.sign_log import SignLog
|
||||||
from zhenxun.models.sign_user import SignUser
|
from zhenxun.models.sign_user import SignUser
|
||||||
@@ -150,7 +150,9 @@ async def _generate_card(
|
|||||||
level = "8"
|
level = "8"
|
||||||
interpolation = 0
|
interpolation = 0
|
||||||
await info_img.text((0, 0), f"· 好感度等级:{level} [{lik2relation[level]}]")
|
await info_img.text((0, 0), f"· 好感度等级:{level} [{lik2relation[level]}]")
|
||||||
await info_img.text((0, 20), f"· {NICKNAME}对你的态度:{level2attitude[level]}")
|
await info_img.text(
|
||||||
|
(0, 20), f"· {BotConfig.self_nickname}对你的态度:{level2attitude[level]}"
|
||||||
|
)
|
||||||
await info_img.text((0, 40), f"· 距离升级还差 {interpolation:.2f} 好感度")
|
await info_img.text((0, 40), f"· 距离升级还差 {interpolation:.2f} 好感度")
|
||||||
|
|
||||||
bar_bk = BuildImage(220, 20, background=SIGN_RESOURCE_PATH / "bar_white.png")
|
bar_bk = BuildImage(220, 20, background=SIGN_RESOURCE_PATH / "bar_white.png")
|
||||||
@@ -214,7 +216,9 @@ async def _generate_card(
|
|||||||
f"好感度:{user.impression:.2f}", size=30
|
f"好感度:{user.impression:.2f}", size=30
|
||||||
)
|
)
|
||||||
watermark = await BuildImage.build_text_image(
|
watermark = await BuildImage.build_text_image(
|
||||||
f"{NICKNAME}@{datetime.now().year}", size=15, font_color=(155, 155, 155)
|
f"{BotConfig.self_nickname}@{datetime.now().year}",
|
||||||
|
size=15,
|
||||||
|
font_color=(155, 155, 155),
|
||||||
)
|
)
|
||||||
today_data = BuildImage(300, 300, color=(255, 255, 255, 0), font_size=20)
|
today_data = BuildImage(300, 300, color=(255, 255, 255, 0), font_size=20)
|
||||||
if is_card_view:
|
if is_card_view:
|
||||||
@@ -390,13 +394,13 @@ async def _generate_html_card(
|
|||||||
else:
|
else:
|
||||||
uid = "XXXX XXXX XXXX"
|
uid = "XXXX XXXX XXXX"
|
||||||
level, next_impression, previous_impression = get_level_and_next_impression(
|
level, next_impression, previous_impression = get_level_and_next_impression(
|
||||||
impression
|
float(user.impression)
|
||||||
)
|
)
|
||||||
interpolation = next_impression - impression
|
interpolation = next_impression - impression
|
||||||
if level == "9":
|
if level == "9":
|
||||||
level = "8"
|
level = "8"
|
||||||
interpolation = 0
|
interpolation = 0
|
||||||
message = f"{NICKNAME}希望你天天开心!"
|
message = f"{BotConfig.self_nickname}希望你开心!"
|
||||||
hour = datetime.now().hour
|
hour = datetime.now().hour
|
||||||
if hour > 6 and hour < 10:
|
if hour > 6 and hour < 10:
|
||||||
message = random.choice(MORNING_MESSAGE)
|
message = random.choice(MORNING_MESSAGE)
|
||||||
@@ -416,19 +420,22 @@ async def _generate_html_card(
|
|||||||
"name": nickname,
|
"name": nickname,
|
||||||
"uid": uid,
|
"uid": uid,
|
||||||
"sign_count": f"{user.sign_count}",
|
"sign_count": f"{user.sign_count}",
|
||||||
"message": message,
|
"message": f"{BotConfig.self_nickname}说: {message}",
|
||||||
"cur_impression": f"{user.impression:.2f}",
|
"cur_impression": f"{user.impression:.2f}",
|
||||||
"impression": f"好感度+{_impression}",
|
"impression": f"好感度+{_impression}",
|
||||||
"gold": f"金币+{gold}",
|
"gold": f"金币+{gold}",
|
||||||
"gift": gift,
|
"gift": gift,
|
||||||
"level": f"{level} [{lik2relation[level]}]",
|
"level": f"{level} [{lik2relation[level]}]",
|
||||||
"attitude": level2attitude[level],
|
"attitude": f"{BotConfig.self_nickname}对你的态度: {level2attitude[level]}",
|
||||||
"interpolation": f"{interpolation:.2f}",
|
"interpolation": f"{interpolation:.2f}",
|
||||||
"heart2": [1 for _ in range(int(level))],
|
"heart2": [1 for _ in range(int(level))],
|
||||||
"heart1": [1 for _ in range(9 - int(level))],
|
"heart1": [1 for _ in range(9 - int(level))],
|
||||||
"process": process,
|
"process": process * 100,
|
||||||
"date": str(now.replace(microsecond=0)),
|
"date": str(now.replace(microsecond=0)),
|
||||||
|
"font_size": 45,
|
||||||
}
|
}
|
||||||
|
if len(nickname) > 6:
|
||||||
|
data["font_size"] = 27
|
||||||
_type = "sign"
|
_type = "sign"
|
||||||
if is_card_view:
|
if is_card_view:
|
||||||
_type = "view"
|
_type = "view"
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from nonebot_plugin_alconna import (
|
|||||||
)
|
)
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginExtraData
|
from zhenxun.configs.utils import PluginExtraData
|
||||||
from zhenxun.models.group_console import GroupConsole
|
from zhenxun.models.group_console import GroupConsole
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
@@ -191,11 +191,16 @@ async def _(bot: Bot, session: EventSession, arparma: Arparma, group_id: int):
|
|||||||
group_list = [g["group_id"] for g in await bot.get_group_list()]
|
group_list = [g["group_id"] for g in await bot.get_group_list()]
|
||||||
if group_id not in group_list:
|
if group_id not in group_list:
|
||||||
logger.debug("群组不存在", "退群", session=session, target=group_id)
|
logger.debug("群组不存在", "退群", session=session, target=group_id)
|
||||||
await MessageUtils.build_message(f"{NICKNAME}未在该群组中...").finish()
|
await MessageUtils.build_message(
|
||||||
|
f"{BotConfig.self_nickname}未在该群组中..."
|
||||||
|
).finish()
|
||||||
try:
|
try:
|
||||||
await bot.set_group_leave(group_id=group_id)
|
await bot.set_group_leave(group_id=group_id)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"{NICKNAME}退出群组成功", "退群", session=session, target=group_id
|
f"{BotConfig.self_nickname}退出群组成功",
|
||||||
|
"退群",
|
||||||
|
session=session,
|
||||||
|
target=group_id,
|
||||||
)
|
)
|
||||||
await MessageUtils.build_message(f"退出群组 {group_id} 成功!").send()
|
await MessageUtils.build_message(f"退出群组 {group_id} 成功!").send()
|
||||||
await GroupConsole.filter(group_id=group_id).delete()
|
await GroupConsole.filter(group_id=group_id).delete()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from fastapi import APIRouter
|
|||||||
from nonebot.adapters.onebot.v11 import ActionFailed
|
from nonebot.adapters.onebot.v11 import ActionFailed
|
||||||
from tortoise.functions import Count
|
from tortoise.functions import Count
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.models.ban_console import BanConsole
|
from zhenxun.models.ban_console import BanConsole
|
||||||
from zhenxun.models.chat_history import ChatHistory
|
from zhenxun.models.chat_history import ChatHistory
|
||||||
from zhenxun.models.fg_request import FgRequest
|
from zhenxun.models.fg_request import FgRequest
|
||||||
@@ -133,7 +133,7 @@ async def _() -> Result:
|
|||||||
"friend_count": f_count,
|
"friend_count": f_count,
|
||||||
"group_count": g_count,
|
"group_count": g_count,
|
||||||
}
|
}
|
||||||
return Result.ok(data, f"{NICKNAME}带来了最新的数据!")
|
return Result.ok(data, f"{BotConfig.self_nickname}带来了最新的数据!")
|
||||||
|
|
||||||
|
|
||||||
@router.get(
|
@router.get(
|
||||||
@@ -177,7 +177,7 @@ async def _() -> Result:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("调用API错误", "/get_request", e=e)
|
logger.error("调用API错误", "/get_request", e=e)
|
||||||
return Result.fail(f"{type(e)}: {e}")
|
return Result.fail(f"{type(e)}: {e}")
|
||||||
return Result.ok(req_result, f"{NICKNAME}带来了最新的数据!")
|
return Result.ok(req_result, f"{BotConfig.self_nickname}带来了最新的数据!")
|
||||||
|
|
||||||
|
|
||||||
@router.post(
|
@router.post(
|
||||||
@@ -234,9 +234,7 @@ async def _(parma: HandleRequest) -> Result:
|
|||||||
else:
|
else:
|
||||||
await GroupConsole.update_or_create(
|
await GroupConsole.update_or_create(
|
||||||
group_id=req.group_id,
|
group_id=req.group_id,
|
||||||
defaults={
|
defaults={"group_flag": 1},
|
||||||
"group_flag": 1,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return Result.warning_("未找到此Id请求...")
|
return Result.warning_("未找到此Id请求...")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
from fastapi import APIRouter, FastAPI
|
||||||
from fastapi.responses import FileResponse
|
from fastapi.responses import FileResponse
|
||||||
from fastapi.staticfiles import StaticFiles
|
from fastapi.staticfiles import StaticFiles
|
||||||
from fastapi import APIRouter, FastAPI
|
|
||||||
|
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
|
|
||||||
@@ -32,4 +32,4 @@ async def init_public(app: FastAPI):
|
|||||||
name=f"public_{pathname}",
|
name=f"public_{pathname}",
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"初始化 web ui assets 失败 e: {e}", "Web UI assets")
|
logger.error(f"初始化 web ui assets 失败", "Web UI assets", e=e)
|
||||||
|
|||||||
@@ -1,19 +1,14 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import zipfile
|
import zipfile
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from nonebot.utils import run_sync
|
from nonebot.utils import run_sync
|
||||||
|
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.http_utils import AsyncHttpx
|
from zhenxun.utils.http_utils import AsyncHttpx
|
||||||
|
|
||||||
from .config import (
|
from .config import COMMAND_NAME, PUBLIC_PATH, TMP_PATH, WEBUI_ASSETS_DOWNLOAD_URL
|
||||||
WEBUI_ASSETS_DOWNLOAD_URL,
|
|
||||||
WEBUI_DATA_PATH,
|
|
||||||
TMP_PATH,
|
|
||||||
COMMAND_NAME,
|
|
||||||
PUBLIC_PATH,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def update_webui_assets():
|
async def update_webui_assets():
|
||||||
@@ -22,13 +17,8 @@ async def update_webui_assets():
|
|||||||
WEBUI_ASSETS_DOWNLOAD_URL, webui_assets_path, follow_redirects=True
|
WEBUI_ASSETS_DOWNLOAD_URL, webui_assets_path, follow_redirects=True
|
||||||
):
|
):
|
||||||
logger.info("下载 webui_assets 成功...", COMMAND_NAME)
|
logger.info("下载 webui_assets 成功...", COMMAND_NAME)
|
||||||
else:
|
return await _file_handle(webui_assets_path)
|
||||||
logger.error("下载 webui_assets 失败...", COMMAND_NAME)
|
raise Exception("下载 webui_assets 失败", COMMAND_NAME)
|
||||||
|
|
||||||
await _file_handle(webui_assets_path)
|
|
||||||
|
|
||||||
logger.info("更新 webui_assets 成功...", COMMAND_NAME)
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
@run_sync
|
@run_sync
|
||||||
@@ -39,8 +29,7 @@ def _file_handle(webui_assets_path: Path):
|
|||||||
tf.extractall(TMP_PATH)
|
tf.extractall(TMP_PATH)
|
||||||
logger.debug("解压 webui_assets 成功...", COMMAND_NAME)
|
logger.debug("解压 webui_assets 成功...", COMMAND_NAME)
|
||||||
else:
|
else:
|
||||||
logger.error("解压 webui_assets 失败...", COMMAND_NAME)
|
raise Exception("解压 webui_assets 失败,文件不存在...", COMMAND_NAME)
|
||||||
return
|
|
||||||
download_file_path = (
|
download_file_path = (
|
||||||
TMP_PATH / [x for x in os.listdir(TMP_PATH) if (TMP_PATH / x).is_dir()][0]
|
TMP_PATH / [x for x in os.listdir(TMP_PATH) if (TMP_PATH / x).is_dir()][0]
|
||||||
)
|
)
|
||||||
|
|||||||
+26
-23
@@ -1,35 +1,38 @@
|
|||||||
import platform
|
import random
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
import nonebot
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from .utils import ConfigsManager
|
from .utils import ConfigsManager
|
||||||
|
|
||||||
if platform.system() == "Linux":
|
|
||||||
import os
|
|
||||||
|
|
||||||
hostip = (
|
class BotSetting(BaseModel):
|
||||||
os.popen("cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'")
|
|
||||||
.read()
|
|
||||||
.replace("\n", "")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
self_nickname: str = ""
|
||||||
|
"""回复时NICKNAME"""
|
||||||
|
system_proxy: str | None = None
|
||||||
|
"""系统代理"""
|
||||||
|
db_url: str = ""
|
||||||
|
"""数据库链接"""
|
||||||
|
platform_superusers: dict[str, list[str]] = {}
|
||||||
|
"""平台超级用户"""
|
||||||
|
|
||||||
# 回复消息名称
|
def get_superuser(self, platform: str) -> str:
|
||||||
NICKNAME: str = "小真寻"
|
"""获取超级用户
|
||||||
|
|
||||||
# 数据库(必要)
|
参数:
|
||||||
# 如果填写了bind就不需要再填写后面的字段了#)
|
platform: 对应平台
|
||||||
# 示例:"bind": "postgres://user:password@127.0.0.1:5432/database"
|
|
||||||
bind: str = ""
|
|
||||||
sql_name: str = "postgres"
|
|
||||||
user: str = "" # 数据用户名
|
|
||||||
password: str = "" # 数据库密码
|
|
||||||
address: str = "" # 数据库地址
|
|
||||||
port: str = "" # 数据库端口
|
|
||||||
database: str = "" # 数据库名称
|
|
||||||
|
|
||||||
# 代理,例如 "http://127.0.0.1:7890"
|
返回:
|
||||||
# 如果是WLS 可以 f"http://{hostip}:7890" 使用寄主机的代理
|
str | None: 超级用户id
|
||||||
SYSTEM_PROXY: str | None = "http://127.0.0.1:7890" # 全局代理
|
"""
|
||||||
|
if self.platform_superusers:
|
||||||
|
if platform_superuser := self.platform_superusers.get(platform):
|
||||||
|
return random.choice(platform_superuser)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
Config = ConfigsManager(Path() / "data" / "configs" / "plugins2config.yaml")
|
Config = ConfigsManager(Path() / "data" / "configs" / "plugins2config.yaml")
|
||||||
|
|
||||||
|
BotConfig = nonebot.get_plugin_config(BotSetting)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from nonebot.rule import to_me
|
|||||||
from nonebot_plugin_alconna import UniMsg
|
from nonebot_plugin_alconna import UniMsg
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
||||||
from zhenxun.models.friend_user import FriendUser
|
from zhenxun.models.friend_user import FriendUser
|
||||||
from zhenxun.models.group_member_info import GroupInfoUser
|
from zhenxun.models.group_member_info import GroupInfoUser
|
||||||
@@ -20,7 +20,7 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
name="AI",
|
name="AI",
|
||||||
description="屑Ai",
|
description="屑Ai",
|
||||||
usage=f"""
|
usage=f"""
|
||||||
与{NICKNAME}普普通通的对话吧!
|
与{BotConfig.self_nickname}普普通通的对话吧!
|
||||||
""".strip(),
|
""".strip(),
|
||||||
extra=PluginExtraData(
|
extra=PluginExtraData(
|
||||||
author="HibiKier",
|
author="HibiKier",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import re
|
|||||||
import ujson as json
|
import ujson as json
|
||||||
from nonebot_plugin_alconna import UniMessage, UniMsg
|
from nonebot_plugin_alconna import UniMessage, UniMsg
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH
|
from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.http_utils import AsyncHttpx
|
from zhenxun.utils.http_utils import AsyncHttpx
|
||||||
@@ -154,9 +154,9 @@ async def xie_ai(text: str) -> str:
|
|||||||
if data["result"] == 0:
|
if data["result"] == 0:
|
||||||
content = data["content"]
|
content = data["content"]
|
||||||
if "菲菲" in content:
|
if "菲菲" in content:
|
||||||
content = content.replace("菲菲", NICKNAME)
|
content = content.replace("菲菲", BotConfig.self_nickname)
|
||||||
if "艳儿" in content:
|
if "艳儿" in content:
|
||||||
content = content.replace("艳儿", NICKNAME)
|
content = content.replace("艳儿", BotConfig.self_nickname)
|
||||||
if "公众号" in content:
|
if "公众号" in content:
|
||||||
content = ""
|
content = ""
|
||||||
if "{br}" in content:
|
if "{br}" in content:
|
||||||
@@ -188,7 +188,7 @@ def hello() -> UniMessage:
|
|||||||
(
|
(
|
||||||
"哦豁?!",
|
"哦豁?!",
|
||||||
"你好!Ov<",
|
"你好!Ov<",
|
||||||
f"库库库,呼唤{NICKNAME}做什么呢",
|
f"库库库,呼唤{BotConfig.self_nickname}做什么呢",
|
||||||
"我在呢!",
|
"我在呢!",
|
||||||
"呼呼,叫俺干嘛",
|
"呼呼,叫俺干嘛",
|
||||||
)
|
)
|
||||||
@@ -206,7 +206,7 @@ def no_result() -> UniMessage:
|
|||||||
random.choice(
|
random.choice(
|
||||||
[
|
[
|
||||||
"你在说啥子?",
|
"你在说啥子?",
|
||||||
f"纯洁的{NICKNAME}没听懂",
|
f"纯洁的{BotConfig.self_nickname}没听懂",
|
||||||
"下次再告诉你(下次一定)",
|
"下次再告诉你(下次一定)",
|
||||||
"你觉得我听懂了吗?嗯?",
|
"你觉得我听懂了吗?嗯?",
|
||||||
"我!不!知!道!",
|
"我!不!知!道!",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.models.ban_console import BanConsole
|
from zhenxun.models.ban_console import BanConsole
|
||||||
|
|
||||||
|
|
||||||
@@ -15,14 +15,14 @@ class AiMessageManager:
|
|||||||
"你是只会说这一句话吗?",
|
"你是只会说这一句话吗?",
|
||||||
"[*],你发我也发!",
|
"[*],你发我也发!",
|
||||||
"[uname],[*]",
|
"[uname],[*]",
|
||||||
f"救命!有笨蛋一直给{NICKNAME}发一样的话!",
|
f"救命!有笨蛋一直给{BotConfig.self_nickname}发一样的话!",
|
||||||
"这句话你已经给我发了{}次了,再发就生气!",
|
"这句话你已经给我发了{}次了,再发就生气!",
|
||||||
]
|
]
|
||||||
self._repeat_message = [
|
self._repeat_message = [
|
||||||
f"请不要学{NICKNAME}说话",
|
f"请不要学{BotConfig.self_nickname}说话",
|
||||||
f"为什么要一直学{NICKNAME}说话?",
|
f"为什么要一直学{BotConfig.self_nickname}说话?",
|
||||||
"你再学!你再学我就生气了!",
|
"你再学!你再学我就生气了!",
|
||||||
f"呜呜,你是想欺负{NICKNAME}嘛..",
|
f"呜呜,你是想欺负{BotConfig.self_nickname}嘛..",
|
||||||
"[uname]不要再学我说话了!",
|
"[uname]不要再学我说话了!",
|
||||||
"再学我说话,我就把你拉进黑名单(生气",
|
"再学我说话,我就把你拉进黑名单(生气",
|
||||||
"你再学![uname]是个笨蛋!",
|
"你再学![uname]是个笨蛋!",
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from nonebot.plugin import PluginMetadata
|
|||||||
from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, Option, on_alconna
|
from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, Option, on_alconna
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.enum import PluginType
|
from zhenxun.utils.enum import PluginType
|
||||||
@@ -79,7 +79,7 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
),
|
),
|
||||||
RegisterConfig(
|
RegisterConfig(
|
||||||
key="WARNING_RESULT",
|
key="WARNING_RESULT",
|
||||||
value=f"请注意对{NICKNAME}的发言内容",
|
value=f"请注意对{BotConfig.self_nickname}的发言内容",
|
||||||
help="口头警告内容",
|
help="口头警告内容",
|
||||||
default_value=None,
|
default_value=None,
|
||||||
),
|
),
|
||||||
@@ -202,7 +202,7 @@ async def _():
|
|||||||
|
|
||||||
关于敏感词:
|
关于敏感词:
|
||||||
|
|
||||||
记住不要骂{NICKNAME}就对了!
|
记住不要骂{BotConfig.self_nickname}就对了!
|
||||||
""".strip()
|
""".strip()
|
||||||
max_width = 0
|
max_width = 0
|
||||||
for m in text.split("\n"):
|
for m in text.split("\n"):
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from nonebot_plugin_alconna import Target, Text, UniMsg
|
|||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
from nonebot_plugin_userinfo import EventUserInfo, UserInfo
|
from nonebot_plugin_userinfo import EventUserInfo, UserInfo
|
||||||
|
|
||||||
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginExtraData
|
from zhenxun.configs.utils import PluginExtraData
|
||||||
from zhenxun.models.group_console import GroupConsole
|
from zhenxun.models.group_console import GroupConsole
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
@@ -58,14 +59,10 @@ async def _(
|
|||||||
if session.id1:
|
if session.id1:
|
||||||
message[0] = Text(str(message[0]).replace("滴滴滴-", "", 1))
|
message[0] = Text(str(message[0]).replace("滴滴滴-", "", 1))
|
||||||
platform = PlatformUtils.get_platform(bot)
|
platform = PlatformUtils.get_platform(bot)
|
||||||
|
superuser_id = None
|
||||||
try:
|
try:
|
||||||
superuser_id = config.platform_superusers["qq"][0]
|
if platform:
|
||||||
if platform == "dodo":
|
superuser_id = BotConfig.get_superuser(platform)
|
||||||
superuser_id = config.platform_superusers["dodo"][0]
|
|
||||||
if platform == "kaiheila":
|
|
||||||
superuser_id = config.platform_superusers["kaiheila"][0]
|
|
||||||
if platform == "discord":
|
|
||||||
superuser_id = config.platform_superusers["discord"][0]
|
|
||||||
except IndexError:
|
except IndexError:
|
||||||
await MessageUtils.build_message("管理员失联啦...").finish()
|
await MessageUtils.build_message("管理员失联啦...").finish()
|
||||||
if not superuser_id:
|
if not superuser_id:
|
||||||
|
|||||||
@@ -5,9 +5,7 @@ from nonebot.adapters.onebot.v11 import Bot as v11Bot
|
|||||||
from nonebot.adapters.onebot.v12 import Bot as v12Bot
|
from nonebot.adapters.onebot.v12 import Bot as v12Bot
|
||||||
from nonebot_plugin_alconna import Image, UniMessage
|
from nonebot_plugin_alconna import Image, UniMessage
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils._build_image import BuildImage
|
|
||||||
from zhenxun.utils.http_utils import AsyncHttpx
|
from zhenxun.utils.http_utils import AsyncHttpx
|
||||||
from zhenxun.utils.message import MessageUtils
|
from zhenxun.utils.message import MessageUtils
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from nonebot_plugin_alconna import Image as alcImg
|
|||||||
from nonebot_plugin_alconna import UniMsg
|
from nonebot_plugin_alconna import UniMsg
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.path_config import TEMP_PATH
|
from zhenxun.configs.path_config import TEMP_PATH
|
||||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig, Task
|
from zhenxun.configs.utils import PluginExtraData, RegisterConfig, Task
|
||||||
from zhenxun.models.task_info import TaskInfo
|
from zhenxun.models.task_info import TaskInfo
|
||||||
@@ -112,7 +112,7 @@ async def _(message: UniMsg, event: Event, session: EventSession):
|
|||||||
image_list.append(m.url)
|
image_list.append(m.url)
|
||||||
if not plain_text and not image_list:
|
if not plain_text and not image_list:
|
||||||
return
|
return
|
||||||
if plain_text and plain_text.startswith(f"@可爱的{NICKNAME}"):
|
if plain_text and plain_text.startswith(f"@可爱的{BotConfig.self_nickname}"):
|
||||||
await MessageUtils.build_message("复制粘贴的虚空艾特?").send(reply_to=True)
|
await MessageUtils.build_message("复制粘贴的虚空艾特?").send(reply_to=True)
|
||||||
if image_list:
|
if image_list:
|
||||||
img_hash = await get_download_image_hash(image_list[0], group_id)
|
img_hash = await get_download_image_hash(image_list[0], group_id)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from nonebot_plugin_alconna import Alconna, Args, Arparma, At, Match, Option, on
|
|||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginCdBlock, PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import PluginCdBlock, PluginExtraData, RegisterConfig
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.depends import GetConfig, UserName
|
from zhenxun.utils.depends import GetConfig, UserName
|
||||||
@@ -298,7 +298,7 @@ async def _(
|
|||||||
try:
|
try:
|
||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
[
|
[
|
||||||
f"{NICKNAME}的节日红包过时了,一共开启了 "
|
f"{BotConfig.self_nickname}的节日红包过时了,一共开启了 "
|
||||||
f"{len(festive_red_bag.open_user)}"
|
f"{len(festive_red_bag.open_user)}"
|
||||||
f" 个红包,共 {sum(festive_red_bag.open_user.values())} 金币\n",
|
f" 个红包,共 {sum(festive_red_bag.open_user.values())} 金币\n",
|
||||||
rank_image,
|
rank_image,
|
||||||
@@ -314,10 +314,10 @@ async def _(
|
|||||||
except JobLookupError:
|
except JobLookupError:
|
||||||
pass
|
pass
|
||||||
await group_red_bag.add_red_bag(
|
await group_red_bag.add_red_bag(
|
||||||
f"{NICKNAME}的红包",
|
f"{BotConfig.self_nickname}的红包",
|
||||||
amount,
|
amount,
|
||||||
num,
|
num,
|
||||||
NICKNAME,
|
BotConfig.self_nickname,
|
||||||
FESTIVE_KEY,
|
FESTIVE_KEY,
|
||||||
_uuid,
|
_uuid,
|
||||||
platform=session.platform,
|
platform=session.platform,
|
||||||
@@ -335,7 +335,7 @@ async def _(
|
|||||||
)
|
)
|
||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
[
|
[
|
||||||
f"{NICKNAME}发起了节日金币红包\n金额: {amount}\n数量: {num}\n",
|
f"{BotConfig.self_nickname}发起了节日金币红包\n金额: {amount}\n数量: {num}\n",
|
||||||
image_result,
|
image_result,
|
||||||
]
|
]
|
||||||
).send(target=target, bot=bot)
|
).send(target=target, bot=bot)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from nonebot.adapters import Bot
|
|||||||
from nonebot.exception import ActionFailed
|
from nonebot.exception import ActionFailed
|
||||||
from nonebot_plugin_alconna import UniMessage
|
from nonebot_plugin_alconna import UniMessage
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.path_config import IMAGE_PATH
|
from zhenxun.configs.path_config import IMAGE_PATH
|
||||||
from zhenxun.models.user_console import UserConsole
|
from zhenxun.models.user_console import UserConsole
|
||||||
from zhenxun.utils.image_utils import BuildImage
|
from zhenxun.utils.image_utils import BuildImage
|
||||||
@@ -58,7 +58,7 @@ class RedBagManager:
|
|||||||
try:
|
try:
|
||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
[
|
[
|
||||||
f"{NICKNAME}的节日红包过时了,一共开启了 "
|
f"{BotConfig.self_nickname}的节日红包过时了,一共开启了 "
|
||||||
f"{len(red_bag.open_user)}"
|
f"{len(red_bag.open_user)}"
|
||||||
f" 个红包,共 {sum(red_bag.open_user.values())} 金币\n",
|
f" 个红包,共 {sum(red_bag.open_user.values())} 金币\n",
|
||||||
rank_image,
|
rank_image,
|
||||||
@@ -92,7 +92,7 @@ class RedBagManager:
|
|||||||
rank_image = await festive_red_bag.build_amount_rank(rank_num, platform)
|
rank_image = await festive_red_bag.build_amount_rank(rank_num, platform)
|
||||||
return MessageUtils.build_message(
|
return MessageUtils.build_message(
|
||||||
[
|
[
|
||||||
f"{NICKNAME}的节日红包过时了,一共开启了 "
|
f"{BotConfig.self_nickname}的节日红包过时了,一共开启了 "
|
||||||
f"{len(festive_red_bag.open_user)}"
|
f"{len(festive_red_bag.open_user)}"
|
||||||
f" 个红包,共 {sum(festive_red_bag.open_user.values())} 金币\n",
|
f" 个红包,共 {sum(festive_red_bag.open_user.values())} 金币\n",
|
||||||
rank_image,
|
rank_image,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from nonebot_plugin_alconna import Image as alcImage
|
|||||||
from nonebot_plugin_alconna import UniMsg
|
from nonebot_plugin_alconna import UniMsg
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginExtraData
|
from zhenxun.configs.utils import PluginExtraData
|
||||||
from zhenxun.models.ban_console import BanConsole
|
from zhenxun.models.ban_console import BanConsole
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
@@ -48,7 +48,7 @@ async def _(bot: Bot, session: EventSession, message: UniMsg):
|
|||||||
try:
|
try:
|
||||||
await PlatformUtils.ban_user(bot, session.id1, group_id, duration)
|
await PlatformUtils.ban_user(bot, session.id1, group_id, duration)
|
||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
f"检测到恶意刷屏,{NICKNAME}要把你关进小黑屋!"
|
f"检测到恶意刷屏,{BotConfig.self_nickname}要把你关进小黑屋!"
|
||||||
).send(at_sender=True)
|
).send(at_sender=True)
|
||||||
mute_manage.reset(session.id1, group_id)
|
mute_manage.reset(session.id1, group_id)
|
||||||
logger.info(f"检测刷屏 被禁言 {duration} 分钟", "禁言检查", session=session)
|
logger.info(f"检测刷屏 被禁言 {duration} 分钟", "禁言检查", session=session)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from nonebot.plugin import PluginMetadata
|
|||||||
from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, Option, on_alconna
|
from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, Option, on_alconna
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.enum import PluginType
|
from zhenxun.utils.enum import PluginType
|
||||||
@@ -15,7 +15,7 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
name="刷屏禁言",
|
name="刷屏禁言",
|
||||||
description="刷屏禁言相关操作",
|
description="刷屏禁言相关操作",
|
||||||
usage="""
|
usage="""
|
||||||
刷屏禁言相关操作,需要 {NICKNAME} 有群管理员权限
|
刷屏禁言相关操作,需要 {BotConfig.self_nickname} 有群管理员权限
|
||||||
指令:
|
指令:
|
||||||
设置刷屏: 查看当前设置
|
设置刷屏: 查看当前设置
|
||||||
-c [count]: 检测最大次数
|
-c [count]: 检测最大次数
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from nonebot.plugin import PluginMetadata
|
|||||||
from nonebot_plugin_alconna import UniMsg
|
from nonebot_plugin_alconna import UniMsg
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginExtraData
|
from zhenxun.configs.utils import PluginExtraData
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.depends import UserName
|
from zhenxun.utils.depends import UserName
|
||||||
@@ -56,7 +56,7 @@ async def _(
|
|||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
random.choice(
|
random.choice(
|
||||||
[
|
[
|
||||||
f"让{NICKNAME}看看是什么结果!答案是:‘{random_text}’",
|
f"让{BotConfig.self_nickname}看看是什么结果!答案是:‘{random_text}’",
|
||||||
f"根据命运的指引,接下来{user_name} ‘{random_text}’ 会比较好",
|
f"根据命运的指引,接下来{user_name} ‘{random_text}’ 会比较好",
|
||||||
f"祈愿被回应了!是 ‘{random_text}’!",
|
f"祈愿被回应了!是 ‘{random_text}’!",
|
||||||
f"结束了,{user_name},命运之轮停在了 ‘{random_text}’!",
|
f"结束了,{user_name},命运之轮停在了 ‘{random_text}’!",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from nonebot_plugin_alconna import At, UniMessage
|
|||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.models.group_member_info import GroupInfoUser
|
from zhenxun.models.group_member_info import GroupInfoUser
|
||||||
from zhenxun.models.user_console import UserConsole
|
from zhenxun.models.user_console import UserConsole
|
||||||
from zhenxun.utils.enum import GoldHandle
|
from zhenxun.utils.enum import GoldHandle
|
||||||
@@ -278,7 +278,7 @@ class RussianManage:
|
|||||||
random.choice(
|
random.choice(
|
||||||
[
|
[
|
||||||
f"不要打扰 {russian.player1[1]} 和 {russian.player2[1]} 的决斗啊!",
|
f"不要打扰 {russian.player1[1]} 和 {russian.player2[1]} 的决斗啊!",
|
||||||
f"给我好好做好一个观众!不然{NICKNAME}就要生气了",
|
f"给我好好做好一个观众!不然{BotConfig.self_nickname}就要生气了",
|
||||||
f"不要捣乱啊baka{uname}!",
|
f"不要捣乱啊baka{uname}!",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@@ -429,7 +429,7 @@ class RussianManage:
|
|||||||
f"\t累计败场:{loser.fail_count}\n"
|
f"\t累计败场:{loser.fail_count}\n"
|
||||||
f"\t累计输掉金币:{loser.lose_money}\n"
|
f"\t累计输掉金币:{loser.lose_money}\n"
|
||||||
f"-------------------\n"
|
f"-------------------\n"
|
||||||
f"哼哼,{NICKNAME}从中收取了 {float(rand)}%({fee}金币) 作为手续费!\n"
|
f"哼哼,{BotConfig.self_nickname}从中收取了 {float(rand)}%({fee}金币) 作为手续费!\n"
|
||||||
f"子弹排列:{russian.bullet_arr}",
|
f"子弹排列:{russian.bullet_arr}",
|
||||||
padding=10,
|
padding=10,
|
||||||
color="#f9f6f2",
|
color="#f9f6f2",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from nonebot.rule import to_me
|
|||||||
from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, on_alconna
|
from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, on_alconna
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import BaseBlock, PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import BaseBlock, PluginExtraData, RegisterConfig
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.message import MessageUtils
|
from zhenxun.utils.message import MessageUtils
|
||||||
@@ -83,7 +83,7 @@ async def arg_handle(
|
|||||||
result, status_code = await get_price(name)
|
result, status_code = await get_price(name)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
f'请先对{NICKNAME}说"设置cookie"来设置cookie!'
|
f'请先对{BotConfig.self_nickname}说"设置cookie"来设置cookie!'
|
||||||
).send(at_sender=True)
|
).send(at_sender=True)
|
||||||
if status_code in [996, 997, 998]:
|
if status_code in [996, 997, 998]:
|
||||||
await MessageUtils.build_message(result).finish()
|
await MessageUtils.build_message(result).finish()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from nonebot_plugin_alconna import (
|
|||||||
)
|
)
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.configs.utils import PluginCdBlock, PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import PluginCdBlock, PluginExtraData, RegisterConfig
|
||||||
from zhenxun.models.sign_user import SignUser
|
from zhenxun.models.sign_user import SignUser
|
||||||
from zhenxun.models.user_console import UserConsole
|
from zhenxun.models.user_console import UserConsole
|
||||||
@@ -173,7 +173,7 @@ async def _(
|
|||||||
local_id: Match[int],
|
local_id: Match[int],
|
||||||
):
|
):
|
||||||
_tags = tags.result.split("#") if tags.available else None
|
_tags = tags.result.split("#") if tags.available else None
|
||||||
if _tags and NICKNAME in _tags:
|
if _tags and BotConfig.self_nickname in _tags:
|
||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
"咳咳咳,虽然我很可爱,但是我木有自己的色图~~~有的话记得发我一份呀"
|
"咳咳咳,虽然我很可爱,但是我木有自己的色图~~~有的话记得发我一份呀"
|
||||||
).finish()
|
).finish()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from pathlib import Path
|
|||||||
from asyncpg import UniqueViolationError
|
from asyncpg import UniqueViolationError
|
||||||
from nonebot_plugin_alconna import UniMessage
|
from nonebot_plugin_alconna import UniMessage
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.path_config import IMAGE_PATH, TEMP_PATH
|
from zhenxun.configs.path_config import IMAGE_PATH, TEMP_PATH
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.http_utils import AsyncHttpx
|
from zhenxun.utils.http_utils import AsyncHttpx
|
||||||
@@ -186,7 +186,7 @@ class SetuManage:
|
|||||||
IMAGE_PATH
|
IMAGE_PATH
|
||||||
/ "luoxiang"
|
/ "luoxiang"
|
||||||
/ random.choice(os.listdir(IMAGE_PATH / "luoxiang")),
|
/ random.choice(os.listdir(IMAGE_PATH / "luoxiang")),
|
||||||
f"\n(快向{NICKNAME}签到提升好感度吧!)",
|
f"\n(快向{BotConfig.self_nickname}签到提升好感度吧!)",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -1,18 +1,9 @@
|
|||||||
import ujson as json
|
|
||||||
from nonebot.utils import is_coroutine_callable
|
from nonebot.utils import is_coroutine_callable
|
||||||
from tortoise import Tortoise
|
from tortoise import Tortoise
|
||||||
from tortoise.connection import connections
|
from tortoise.connection import connections
|
||||||
from tortoise.models import Model as Model_
|
from tortoise.models import Model as Model_
|
||||||
|
|
||||||
from zhenxun.configs.config import (
|
from zhenxun.configs.config import BotConfig
|
||||||
address,
|
|
||||||
bind,
|
|
||||||
database,
|
|
||||||
password,
|
|
||||||
port,
|
|
||||||
sql_name,
|
|
||||||
user,
|
|
||||||
)
|
|
||||||
from zhenxun.configs.path_config import DATA_PATH
|
from zhenxun.configs.path_config import DATA_PATH
|
||||||
|
|
||||||
from .log import logger
|
from .log import logger
|
||||||
@@ -27,7 +18,7 @@ class Model(Model_):
|
|||||||
自动添加模块
|
自动添加模块
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
Model_ (_type_): Model
|
Model_: Model
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init_subclass__(cls, **kwargs):
|
def __init_subclass__(cls, **kwargs):
|
||||||
@@ -38,38 +29,13 @@ class Model(Model_):
|
|||||||
|
|
||||||
|
|
||||||
async def init():
|
async def init():
|
||||||
if DATABASE_SETTING_FILE.exists():
|
if not BotConfig.db_url:
|
||||||
with open(DATABASE_SETTING_FILE, "r", encoding="utf-8") as f:
|
raise Exception(f"数据库配置为空,请在.env.dev中配置DB_URL...")
|
||||||
setting_data = json.load(f)
|
|
||||||
else:
|
|
||||||
i_bind = bind
|
|
||||||
if not i_bind and any([user, password, address, port, database]):
|
|
||||||
i_bind = f"{sql_name}://{user}:{password}@{address}:{port}/{database}"
|
|
||||||
setting_data = {
|
|
||||||
"bind": i_bind,
|
|
||||||
"sql_name": sql_name,
|
|
||||||
"user": user,
|
|
||||||
"password": password,
|
|
||||||
"address": address,
|
|
||||||
"port": port,
|
|
||||||
"database": database,
|
|
||||||
}
|
|
||||||
with open(DATABASE_SETTING_FILE, "w", encoding="utf-8") as f:
|
|
||||||
json.dump(setting_data, f, ensure_ascii=False, indent=4)
|
|
||||||
i_bind = setting_data.get("bind")
|
|
||||||
_sql_name = setting_data.get("sql_name")
|
|
||||||
_user = setting_data.get("user")
|
|
||||||
_password = setting_data.get("password")
|
|
||||||
_address = setting_data.get("address")
|
|
||||||
_port = setting_data.get("port")
|
|
||||||
_database = setting_data.get("database")
|
|
||||||
if not i_bind and not any([_user, _password, _address, _port, _database]):
|
|
||||||
raise ValueError("\n数据库配置未填写...")
|
|
||||||
if not i_bind:
|
|
||||||
i_bind = f"{_sql_name}://{_user}:{_password}@{_address}:{_port}/{_database}"
|
|
||||||
try:
|
try:
|
||||||
await Tortoise.init(
|
await Tortoise.init(
|
||||||
db_url=i_bind, modules={"models": MODELS}, timezone="Asia/Shanghai"
|
db_url=BotConfig.db_url,
|
||||||
|
modules={"models": MODELS},
|
||||||
|
timezone="Asia/Shanghai",
|
||||||
)
|
)
|
||||||
if SCRIPT_METHOD:
|
if SCRIPT_METHOD:
|
||||||
db = Tortoise.get_connection("default")
|
db = Tortoise.get_connection("default")
|
||||||
|
|||||||
@@ -182,15 +182,20 @@ class ImageTemplate:
|
|||||||
_temp["width"] = w
|
_temp["width"] = w
|
||||||
build_data_list.append(_temp)
|
build_data_list.append(_temp)
|
||||||
column_image_list = []
|
column_image_list = []
|
||||||
|
column_name_image_list: list[BuildImage] = []
|
||||||
|
for i, data in enumerate(build_data_list):
|
||||||
|
column_name_image = await BuildImage.build_text_image(
|
||||||
|
column_name[i], font, 12, "#C8CCCF"
|
||||||
|
)
|
||||||
|
column_name_image_list.append(column_name_image)
|
||||||
|
max_h = max([c.height for c in column_name_image_list])
|
||||||
for i, data in enumerate(build_data_list):
|
for i, data in enumerate(build_data_list):
|
||||||
width = data["width"] + padding * 2
|
width = data["width"] + padding * 2
|
||||||
height = (base_h + row_space) * (len(data["data"]) + 1) + padding * 2
|
height = (base_h + row_space) * (len(data["data"]) + 1) + padding * 2
|
||||||
background = BuildImage(width, height, (255, 255, 255))
|
background = BuildImage(width, height, (255, 255, 255))
|
||||||
column_name_image = await BuildImage.build_text_image(
|
column_name_image = column_name_image_list[i]
|
||||||
column_name[i], font, 12, "#C8CCCF"
|
|
||||||
)
|
|
||||||
await background.paste(column_name_image, (0, 20), center_type="width")
|
await background.paste(column_name_image, (0, 20), center_type="width")
|
||||||
cur_h = column_name_image.height + row_space + 20
|
cur_h = max_h + row_space + 20
|
||||||
for item in data["data"]:
|
for item in data["data"]:
|
||||||
style = RowStyle(font=font)
|
style = RowStyle(font=font)
|
||||||
if text_style:
|
if text_style:
|
||||||
@@ -198,13 +203,15 @@ class ImageTemplate:
|
|||||||
if isinstance(item, tuple):
|
if isinstance(item, tuple):
|
||||||
"""图片"""
|
"""图片"""
|
||||||
data, width, height = item
|
data, width, height = item
|
||||||
|
image_ = None
|
||||||
if isinstance(data, Path):
|
if isinstance(data, Path):
|
||||||
image_ = BuildImage(width, height, background=data)
|
image_ = BuildImage(width, height, background=data)
|
||||||
elif isinstance(data, bytes):
|
elif isinstance(data, bytes):
|
||||||
image_ = BuildImage(width, height, background=BytesIO(data))
|
image_ = BuildImage(width, height, background=BytesIO(data))
|
||||||
elif isinstance(data, BuildImage):
|
elif isinstance(data, BuildImage):
|
||||||
image_ = data
|
image_ = data
|
||||||
await background.paste(image_, (padding, cur_h))
|
if image_:
|
||||||
|
await background.paste(image_, (padding, cur_h))
|
||||||
else:
|
else:
|
||||||
await background.text(
|
await background.text(
|
||||||
(padding, cur_h),
|
(padding, cur_h),
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from nonebot import get_driver
|
|||||||
from playwright.__main__ import main
|
from playwright.__main__ import main
|
||||||
from playwright.async_api import Browser, Playwright, async_playwright
|
from playwright.async_api import Browser, Playwright, async_playwright
|
||||||
|
|
||||||
from zhenxun.configs.config import SYSTEM_PROXY
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
|
|
||||||
driver = get_driver()
|
driver = get_driver()
|
||||||
@@ -45,12 +45,12 @@ def install():
|
|||||||
os.environ["PLAYWRIGHT_DOWNLOAD_HOST"] = (
|
os.environ["PLAYWRIGHT_DOWNLOAD_HOST"] = (
|
||||||
"https://npmmirror.com/mirrors/playwright/"
|
"https://npmmirror.com/mirrors/playwright/"
|
||||||
)
|
)
|
||||||
if SYSTEM_PROXY:
|
if BotConfig.system_proxy:
|
||||||
os.environ["HTTPS_PROXY"] = SYSTEM_PROXY
|
os.environ["HTTPS_PROXY"] = BotConfig.system_proxy
|
||||||
|
|
||||||
def restore_env_variables():
|
def restore_env_variables():
|
||||||
os.environ.pop("PLAYWRIGHT_DOWNLOAD_HOST", None)
|
os.environ.pop("PLAYWRIGHT_DOWNLOAD_HOST", None)
|
||||||
if SYSTEM_PROXY:
|
if BotConfig.system_proxy:
|
||||||
os.environ.pop("HTTPS_PROXY", None)
|
os.environ.pop("HTTPS_PROXY", None)
|
||||||
if original_proxy is not None:
|
if original_proxy is not None:
|
||||||
os.environ["HTTPS_PROXY"] = original_proxy
|
os.environ["HTTPS_PROXY"] = original_proxy
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from nonebot_plugin_htmlrender import get_browser
|
|||||||
from playwright.async_api import Page
|
from playwright.async_api import Page
|
||||||
from retrying import retry
|
from retrying import retry
|
||||||
|
|
||||||
from zhenxun.configs.config import SYSTEM_PROXY
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.message import MessageUtils
|
from zhenxun.utils.message import MessageUtils
|
||||||
from zhenxun.utils.user_agent import get_user_agent
|
from zhenxun.utils.user_agent import get_user_agent
|
||||||
@@ -23,7 +23,7 @@ from zhenxun.utils.user_agent import get_user_agent
|
|||||||
|
|
||||||
class AsyncHttpx:
|
class AsyncHttpx:
|
||||||
|
|
||||||
proxy = {"http://": SYSTEM_PROXY, "https://": SYSTEM_PROXY}
|
proxy = {"http://": BotConfig.system_proxy, "https://": BotConfig.system_proxy}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@retry(stop_max_attempt_number=3)
|
@retry(stop_max_attempt_number=3)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import nonebot
|
|||||||
from nonebot.adapters.onebot.v11 import Message, MessageSegment
|
from nonebot.adapters.onebot.v11 import Message, MessageSegment
|
||||||
from nonebot_plugin_alconna import At, Image, Text, UniMessage
|
from nonebot_plugin_alconna import At, Image, Text, UniMessage
|
||||||
|
|
||||||
from zhenxun.configs.config import NICKNAME
|
from zhenxun.configs.config import BotConfig
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils._build_image import BuildImage
|
from zhenxun.utils._build_image import BuildImage
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ class MessageUtils:
|
|||||||
cls,
|
cls,
|
||||||
msg_list: list[str | Message],
|
msg_list: list[str | Message],
|
||||||
uin: str,
|
uin: str,
|
||||||
name: str = f"这里是{NICKNAME}",
|
name: str = f"这里是{BotConfig.self_nickname}",
|
||||||
) -> list[dict]:
|
) -> list[dict]:
|
||||||
"""生成自定义合并消息
|
"""生成自定义合并消息
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user