diff --git a/plugins/guess_song/main.py b/plugins/guess_song/main.py
index 2518ab2..a684238 100644
--- a/plugins/guess_song/main.py
+++ b/plugins/guess_song/main.py
@@ -20,6 +20,8 @@ import aiohttp
from pydub import AudioSegment
from io import BytesIO
+from wechat_ipad.models.appmsg_xml import MUSIC_XML
+
class GuessSongRedisDB:
"""猜歌名游戏Redis相关操作"""
@@ -135,17 +137,17 @@ class GuessSongPlugin(MessagePluginInterface):
self._commands = guess_song_config.get("command", ["猜歌名"])
self.command_format = guess_song_config.get("command-format", "猜歌名 [歌手名]/[歌名]")
self.enable = guess_song_config.get("enable", True)
-
+
# 加载API配置
api_config = guess_song_config.get("api", {})
self.music_list_api = api_config.get("music_list_api", "")
self.music_single_api = api_config.get("music_single_api", "")
-
+
# 加载游戏配置
game_config = guess_song_config.get("game", {})
self.clip_duration = game_config.get("clip_duration", 10)
self.hint_timeout = game_config.get("hint_timeout", 30)
-
+
# 加载热门歌手列表
singers_config = guess_song_config.get("popular_singers", {})
self.popular_singers = singers_config.get("list", [
@@ -438,52 +440,8 @@ class GuessSongPlugin(MessagePluginInterface):
singer_pic = song_info.get("singer_pic", "")
data_url = song_info.get("data_url", "")
- xml_message = f"""
- {song_name}
- {singer_name}-点击三角直接播放
- view
- 3
- 0
-
- {data_url}
- {play_url}
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
- 0
-
-
-
-
-
- 0
-
-
- {singer_pic}
-
-0
-
- 49
- 汽水音乐
-
-"""
-
+ xml_message = f"{MUSIC_XML}".format(song_name=song_name, singer_name=singer_name, play_url=play_url,
+ data_url=data_url, singer_pic=singer_pic)
self.LOG.info(f"发送音乐消息:{xml_message}")
res = await bot.send_app_message(wxid=receiver, xml=xml_message, type=0)
self.LOG.info(f"发送音乐消息 res:{res}")
diff --git a/utils/video_utils.py b/utils/video_utils.py
index 382966b..392b749 100644
--- a/utils/video_utils.py
+++ b/utils/video_utils.py
@@ -1,13 +1,11 @@
-import io
import os
import tempfile
import cv2
-
from loguru import logger
-def _get_first_frame(video_path, output_path):
+def get_first_frame(video_path, output_path):
"""
提取视频的第一帧并保存为图片
:param video_path: 视频文件路径
@@ -50,7 +48,7 @@ def _get_first_frame(video_path, output_path):
cap.release()
-def _get_first_frame_bytes(video_bytes, output_path):
+def get_first_frame_bytes(video_bytes, output_path):
"""
提取视频的第一帧并保存为图片
:param video_bytes: 视频文件流
@@ -65,7 +63,7 @@ def _get_first_frame_bytes(video_bytes, output_path):
temp_file.write(video_bytes)
temp_file_path = temp_file.name # 获取临时文件路径
# 打开视频文件
- return _get_first_frame(temp_file_path, output_path)
+ return get_first_frame(temp_file_path, output_path)
except Exception as e:
logger.error(f"提取视频首帧时出错: {e}")
return None
diff --git a/wechat_ipad/client/message.py b/wechat_ipad/client/message.py
index d76a337..4b3b940 100644
--- a/wechat_ipad/client/message.py
+++ b/wechat_ipad/client/message.py
@@ -9,13 +9,12 @@ from pathlib import Path
from typing import Union
import aiohttp
+import pysilk
from loguru import logger
+from pydub import AudioSegment
from pymediainfo import MediaInfo
-import pysilk
-from pydub import AudioSegment
-
-from utils.video_utils import _get_first_frame, _get_first_frame_bytes
+from utils.video_utils import get_first_frame, get_first_frame_bytes
from wechat_ipad import UserLoggedOut
from wechat_ipad.client.base import WechatAPIClientBase
@@ -233,7 +232,7 @@ class MessageMixin(WechatAPIClientBase):
media_info = MediaInfo.parse(BytesIO(video))
# 如果没有传入首帧,则自己提取一次
if not has_image:
- first_frame = _get_first_frame_bytes(video, f"frame_{int(time.time())}.jpg")
+ first_frame = get_first_frame_bytes(video, f"frame_{int(time.time())}.jpg")
if first_frame:
image = Path(first_frame)
elif isinstance(video, os.PathLike):
@@ -247,7 +246,7 @@ class MessageMixin(WechatAPIClientBase):
media_info = MediaInfo.parse(video_path)
# 如果没有传入首帧,则自己提取一次
if not has_image:
- first_frame = _get_first_frame(video_path, f"frame_{int(time.time())}.jpg")
+ first_frame = get_first_frame(video_path, f"frame_{int(time.time())}.jpg")
if first_frame:
image = Path(first_frame)
else:
@@ -542,10 +541,17 @@ class MessageMixin(WechatAPIClientBase):
if not self.wxid:
raise UserLoggedOut("请先登录")
- async with aiohttp.ClientSession() as session:
- json_param = {"Wxid": self.wxid, "ToWxid": wxid, "CardWxid": card_wxid, "CardAlias": card_alias,
- "CardNickname": card_nickname}
- response = await session.post(f'http://{self.ip}:{self.port}/SendCardMsg', json=json_param)
+ async with (aiohttp.ClientSession() as session):
+
+ json_param = {
+ "CardAlias": card_alias,
+ "CardNickName": card_nickname,
+ "CardWxId": card_wxid,
+ "ToWxid": wxid,
+ "Wxid": self.wxid
+ }
+
+ response = await session.post(f'http://{self.ip}:{self.port}/api/Msg/ShareCard', json=json_param)
json_resp = await response.json()
if json_resp.get("Success"):
@@ -577,7 +583,7 @@ class MessageMixin(WechatAPIClientBase):
"""
return await self._queue_message(self._send_app_message, wxid, xml, type)
- async def _send_app_message(self, wxid: str, xml: str, type: int) -> tuple[int, int, int]:
+ async def _send_app_message(self, wxid: str, xml: str, type: int=0) -> tuple[int, int, int]:
if not self.wxid:
raise UserLoggedOut("请先登录")
# {