From 65fa057ab4d44c142a6b86b84ddd6e750992fd26 Mon Sep 17 00:00:00 2001 From: Pyhtagodzilla <1670671958@qq.com> Date: Fri, 25 Jul 2025 21:22:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8D=A2=E4=BA=86=E6=96=87=E6=A1=A3=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E7=9A=84=E5=B7=A5=E4=BD=9C=E6=96=B9=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E4=B8=94=EF=BC=8C=E4=B8=BA=E4=BA=86=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=83=AD=E9=87=8D=E8=BD=BD=E8=80=8C=E5=B0=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=A4=96=E6=8C=82=E4=B8=BA=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E3=80=82=E8=BF=99=E4=BA=9B=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=B8=8D?= =?UTF-8?q?=E4=B8=80=E5=AE=9A=E8=A6=81=E4=BB=A5=E6=8F=92=E4=BB=B6=E5=BD=A2?= =?UTF-8?q?=E5=BC=8F=E5=AD=98=E5=9C=A8=E3=80=82=E8=8B=A5=E6=9C=89=E5=BF=85?= =?UTF-8?q?=E8=A6=81=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=90=88=E5=B9=B6=E8=BF=9B?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E7=A8=8B=E5=BA=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/launch.py | 17 ++++ src/{ => plugins/data_base}/__init__.py | 0 src/plugins/data_base/dataBase.py | 4 + src/plugins/get_file/__init__.py | 3 + src/plugins/get_file/get_file.py | 129 ++++++++++++++++++++++++ src/utils/get_image.py | 77 -------------- 6 files changed, 153 insertions(+), 77 deletions(-) create mode 100644 src/launch.py rename src/{ => plugins/data_base}/__init__.py (100%) create mode 100644 src/plugins/data_base/dataBase.py create mode 100644 src/plugins/get_file/__init__.py create mode 100644 src/plugins/get_file/get_file.py delete mode 100644 src/utils/get_image.py diff --git a/src/launch.py b/src/launch.py new file mode 100644 index 0000000..49584e7 --- /dev/null +++ b/src/launch.py @@ -0,0 +1,17 @@ +import time +import os +from dotenv import load_dotenv +from ncatbot.core import BotClient + +load_dotenv(dotenv_path=r"../.env") + +bot = BotClient() + +bot.run( + bt_uin=os.getenv("BOT_ACCOUNT"), + root=os.getenv("ROOT_ACCOUNT"), + ws_uri=os.getenv("WS_URI"), + ws_token=os.getenv("WS_TOKEN"), + webui_uri=os.getenv("WEBUI_URI"), + webui_token=os.getenv("WEBUI_TOKEN") +) \ No newline at end of file diff --git a/src/__init__.py b/src/plugins/data_base/__init__.py similarity index 100% rename from src/__init__.py rename to src/plugins/data_base/__init__.py diff --git a/src/plugins/data_base/dataBase.py b/src/plugins/data_base/dataBase.py new file mode 100644 index 0000000..2efd40c --- /dev/null +++ b/src/plugins/data_base/dataBase.py @@ -0,0 +1,4 @@ +from sqlmodel import SQLModel, Session, select, create_engine + +class Data(SQLModel, table=True): + __tablename__ = 'file' diff --git a/src/plugins/get_file/__init__.py b/src/plugins/get_file/__init__.py new file mode 100644 index 0000000..ec9ad08 --- /dev/null +++ b/src/plugins/get_file/__init__.py @@ -0,0 +1,3 @@ +from .get_file import GetFile + +__all__ = ['GetFile'] diff --git a/src/plugins/get_file/get_file.py b/src/plugins/get_file/get_file.py new file mode 100644 index 0000000..d202330 --- /dev/null +++ b/src/plugins/get_file/get_file.py @@ -0,0 +1,129 @@ +from ncatbot.core import BotClient, GroupMessage, PrivateMessage +# from ncatbot.core import (MessageChain, Text, Image) +from ncatbot.utils import get_log +from ncatbot.plugin import BasePlugin, CompatibleEnrollment +from dotenv import load_dotenv +import requests +import os + +# bot = BotClient() +bot = CompatibleEnrollment +_log = get_log() + + +class GetFile(BasePlugin): + name = "GetFile" + version = "0.0.1 beta" + + @bot.private_event() + async def on_receive_images_private_event(self, msg: PrivateMessage): + meta_message = str(msg) + _log.info(f"The message's meta data is: {meta_message}") + _log.info(f"The message's raw message is: {msg.raw_message}") + + if "[CQ:image," in msg.raw_message: + divided_message = msg.raw_message.split(',') + + for item in divided_message: + if "file=" in item: + file_name = item.split("=")[1] + _log.info(f"Name of the image is: {file_name}") + image_url = await self.api.get_image(file_name) + _log.info(f"Image's information collected by \"get_image\" is: {image_url}") + real_url = image_url['data']['url'] + _log.info(f"Image's real url is: {real_url}") + + response = requests.get(real_url) + img = response.content + with open(f"D:/Projects/memebot/src/data/pics/{file_name}", 'wb') as f: + f.write(img) + + @bot.group_event() + async def on_receive_images_group_event(self, msg: GroupMessage): + _log.info(f"The message's meta data is: {str(msg)}") + _log.info(f"The message's raw message is: {msg.raw_message}") + + # if "[CQ:image," in msg.raw_message: + if msg.raw_message.startswith("[CQ:image,"): + divided_message = msg.raw_message.split(',') + + for item in divided_message: + # if "file=" in item: + if item.startswith("file="): + file_name = item.split("=")[1] + _log.info(f"Name of the image is: {file_name}") + image_url = await self.api.get_image(file_name) + _log.info(f"Image's information collected by \"get_image\" is: {image_url}") + real_url = image_url['data']['url'] + _log.info(f"Image's real url is: {real_url}") + + response = requests.get(real_url) + img = response.content + with open(f"../data/pics/{file_name}", 'wb') as f: + f.write(img) + + @bot.group_event() + async def on_receive_videos_group_event(self, msg: GroupMessage): + _log.info(f"The message's meta data is: {str(msg)}") + _log.info(f"The message's raw message is: {msg.raw_message}") + + message = msg.raw_message[1: -1] + + if message.startswith("CQ:video,"): + divided_message = message.split(',') + for item in divided_message: + if item.startswith("file="): + file_name = item.split("=")[1] + _log.info(f"Name of the video is: {file_name}") + video_url = await self.api.get_file(file_name) + _log.info(f"Video's information collected by \"get_video\" is: {video_url}") + real_url = video_url['data']['url'] + _log.info(f"Video's real url is: {real_url}") + + response = requests.get(real_url) + video = response.content + with open(f"../data/videos/{file_name}", 'wb') as f: + f.write(video) + + @bot.private_event() + async def on_receive_videos_private_event(self, msg: PrivateMessage): + _log.info(f"The message's meta data is: {str(msg)}") + _log.info(f"The message's raw message is: {msg.raw_message}") + + message = msg.raw_message[1: -1] + + if message.startswith("CQ:video,"): + divided_message = message.split(',') + for item in divided_message: + if item.startswith("file="): + file_name = item.split("=")[1] + _log.info(f"Name of the video is: {file_name}") + video_url = await self.api.get_file(file_name) + _log.info(f"Video's information collected by \"get_video\" is: {video_url}") + real_url = video_url['data']['url'] + _log.info(f"Video's real url is: {real_url}") + + response = requests.get(real_url) + video = response.content + with open(f"../data/videos/{file_name}", 'wb') as f: + f.write(video) + + +""" +当单独运行这个程序时,会连接napcat并保存图片和视频到本地。 + +""" + +if __name__ == "__main__": + load_dotenv(dotenv_path=r"../../../.env") + bot = BotClient() + api = bot.run( + bt_uin=os.getenv("BOT_ACCOUNT"), + root=os.getenv("ROOT_ACCOUNT"), + ws_uri=os.getenv("WS_URI"), + ws_token=os.getenv("WS_TOKEN"), + webui_uri=os.getenv("WEBUI_URI"), + webui_token=os.getenv("WEBUI_TOKEN") + ) + +# [2025-07-25 17:07:40,602] INFO [MainThread|MainProcess] Logger (get_image.py:on_receive_images_group_event:40) | The message's raw message is: [CQ:video,file=3d13c5917a796a92d91d8f9de44b0bf4.mp4,url=https://multimedia.nt.qq.com.cn:443/download?appid=1415&format=origin&orgfmt=t265&spec=0&client_proto=ntv2&client_appid=537298509&client_type=linux&client_ver=3.2.18-36580&client_down_type=auto&client_aio_type=aio&rkey=CAMSoAHGtzhaJAf05S58aBorSh34zdFk2POE-DFhRWajbvwClbIFzBwF7L6O3xQ7vGtHcK3uh3lqvl9-WhxzqeO_EtfFrx6Em_sJMdepoSJKwoBLIZHPA84yP0MoG10RNQylp1U4ZWQFTCG6h6dFARX4rHyJkvpAi1Zit8neB9En2OELgwcSzyUnVqTWluv8OxiQpEW3QmeAhR2O0SSO0v40V_Yi,file_size=2130820] diff --git a/src/utils/get_image.py b/src/utils/get_image.py deleted file mode 100644 index 49d4f40..0000000 --- a/src/utils/get_image.py +++ /dev/null @@ -1,77 +0,0 @@ -from ncatbot.core import BotClient, GroupMessage, PrivateMessage -# from ncatbot.core import (MessageChain, Text, Image) -from ncatbot.utils import get_log -from dotenv import load_dotenv -import requests -import os - -bot = BotClient() -_log = get_log() - - -@bot.private_event() -async def on_receive_images_private_event(msg: PrivateMessage): - meta_message = str(msg) - _log.info(f"The message's meta data is: {meta_message}") - _log.info(f"The message's raw message is: {msg.raw_message}") - - if "[CQ:image," in msg.raw_message: - divided_message = msg.raw_message.split(',') - - for item in divided_message: - if "file=" in item: - file_name = item.split("=")[1] - _log.info(f"Name of the image is: {file_name}") - image_url = await bot.api.get_image(file_name) - _log.info(f"Image's information collected by \"get_image\" is: {image_url}") - real_url = image_url['data']['url'] - _log.info(f"Image's real url is: {real_url}") - - response = requests.get(real_url) - img = response.content - with open(f"D:/Projects/memebot/src/data/pics/{file_name}", 'wb') as f: - f.write(img) - - -@bot.group_event() -async def on_receive_images_group_event(msg: GroupMessage): - meta_message = str(msg) - _log.info(f"The message's meta data is: {meta_message}") - _log.info(f"The message's raw message is: {msg.raw_message}") - - # if "[CQ:image," in msg.raw_message: - if msg.raw_message.startswith("[CQ:image,"): - divided_message = msg.raw_message.split(',') - - for item in divided_message: - # if "file=" in item: - if item.startswith("file="): - file_name = item.split("=")[1] - _log.info(f"Name of the image is: {file_name}") - image_url = await bot.api.get_image(file_name) - _log.info(f"Image's information collected by \"get_image\" is: {image_url}") - real_url = image_url['data']['url'] - _log.info(f"Image's real url is: {real_url}") - - response = requests.get(real_url) - img = response.content - with open(f"../../data/pics/{file_name}", 'wb') as f: - f.write(img) - - -""" -当单独运行这个程序时,会连接napcat并保存图片到本地。 - -""" - -if __name__ == "__main__": - load_dotenv(dotenv_path=r"../../.env") - - api = bot.run( - bt_uin=os.getenv("BOT_ACCOUNT"), - root=os.getenv("ROOT_ACCOUNT"), - ws_uri=os.getenv("WS_URI"), - ws_token=os.getenv("WS_TOKEN"), - webui_uri=os.getenv("WEBUI_URI"), - webui_token=os.getenv("WEBUI_TOKEN") - )