mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-12 06:55:58 +08:00
✨ 新增ComWechatClint
支持并修复一些BUG (#482)
* ✨ 新增`OneBot V12`适配器的支持 * ✨ 新增接收OneBot V12适配器的消息 * ✨ 支持`OneBotV12 For ComWechatClient` * 🎨 更改名称为`onebot_v12` * 🐛 修复了一些问题 * 🐛 修复了一些问题
This commit is contained in:
parent
d5ee87eaf0
commit
dd327e12f1
@ -135,6 +135,26 @@ async def send_char_adv(bot: Bot, ev: Event):
|
|||||||
at_list = [Message('at', i) for i in _at_list]
|
at_list = [Message('at', i) for i in _at_list]
|
||||||
at_list.pop(0)
|
at_list.pop(0)
|
||||||
message.extend(at_list)
|
message.extend(at_list)
|
||||||
|
# OneBot V12 (仅在 ComWechatClient 测试)
|
||||||
|
if bot.adapter.get_name() == 'OneBot V12':
|
||||||
|
# v12msgid = raw_data['id'] # V12的消息id
|
||||||
|
# time = raw_data['time'] # 返回格式 2023-04-01 16:38:51+00:00
|
||||||
|
|
||||||
|
messages = raw_data['original_message']
|
||||||
|
# self = raw_data['self'] # 返回 platform='xxx' user_id='wxid_xxxxx'
|
||||||
|
# platform = self.platform # 机器人平台
|
||||||
|
self_id = bot.self_id # 机器人账号ID
|
||||||
|
msg_id = raw_data['message_id'] # 消息ID
|
||||||
|
sp_bot_id = 'onebot_v12'
|
||||||
|
|
||||||
|
if 'group_id' in raw_data:
|
||||||
|
group_id = raw_data['group_id']
|
||||||
|
user_id = raw_data['user_id']
|
||||||
|
sp_user_type = 'group'
|
||||||
|
else:
|
||||||
|
user_id = raw_data['user_id']
|
||||||
|
sp_user_type = 'direct'
|
||||||
|
# V12还支持频道等其他平台,速速Pr!
|
||||||
|
|
||||||
if sp_bot_id:
|
if sp_bot_id:
|
||||||
bot_id = sp_bot_id
|
bot_id = sp_bot_id
|
||||||
@ -206,15 +226,26 @@ def convert_message(_msg: Any, message: List[Message]):
|
|||||||
message.append(
|
message.append(
|
||||||
Message(
|
Message(
|
||||||
'text',
|
'text',
|
||||||
_msg.data['text'].replace('/', '')
|
_msg.data['text']
|
||||||
if 'text' in _msg.data
|
if 'text' in _msg.data
|
||||||
else _msg.data['content'].replace('/', ''),
|
else _msg.data['content'],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
elif _msg.type == 'image':
|
elif _msg.type == 'image':
|
||||||
message.append(Message('image', _msg.data['url']))
|
file_id = _msg.data.get('file_id')
|
||||||
|
if file_id in _msg.data.values():
|
||||||
|
message.append(Message('image', _msg.data['file_id']))
|
||||||
|
logger.debug(_msg.data["file_id"])
|
||||||
|
else:
|
||||||
|
message.append(Message('image', _msg.data['url']))
|
||||||
elif _msg.type == 'at':
|
elif _msg.type == 'at':
|
||||||
message.append(Message('at', _msg.data['qq']))
|
message.append(Message('at', _msg.data['qq']))
|
||||||
elif _msg.type == 'reply':
|
elif _msg.type == 'reply':
|
||||||
message.append(Message('reply', _msg.data['id']))
|
message_id = _msg.data.get('message_id')
|
||||||
|
if message_id in _msg.data.values():
|
||||||
|
message.append(Message('reply', _msg.data['message_id']))
|
||||||
|
else:
|
||||||
|
message.append(Message('reply', _msg.data['id']))
|
||||||
|
elif _msg.type == 'mention':
|
||||||
|
message.append(Message('at', _msg.data['user_id']))
|
||||||
return message
|
return message
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
import time
|
||||||
import base64
|
import base64
|
||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@ -113,8 +114,9 @@ class GsClient:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
# 根据bot_id字段发送消息
|
# 根据bot_id字段发送消息
|
||||||
# OneBot v11 & v12
|
|
||||||
for bot in bot_list:
|
for bot in bot_list:
|
||||||
|
# OneBot v11
|
||||||
if msg.bot_id == 'onebot':
|
if msg.bot_id == 'onebot':
|
||||||
await onebot_send(
|
await onebot_send(
|
||||||
bot,
|
bot,
|
||||||
@ -126,6 +128,18 @@ class GsClient:
|
|||||||
msg.target_id,
|
msg.target_id,
|
||||||
msg.target_type,
|
msg.target_type,
|
||||||
)
|
)
|
||||||
|
# OneBot v12
|
||||||
|
elif msg.bot_id == 'onebot_v12':
|
||||||
|
await onebot_v12_send(
|
||||||
|
bot,
|
||||||
|
content,
|
||||||
|
image,
|
||||||
|
node,
|
||||||
|
file,
|
||||||
|
at_list,
|
||||||
|
msg.target_id,
|
||||||
|
msg.target_type,
|
||||||
|
)
|
||||||
# ntchat
|
# ntchat
|
||||||
elif msg.bot_id == 'ntchat':
|
elif msg.bot_id == 'ntchat':
|
||||||
await ntchat_send(
|
await ntchat_send(
|
||||||
@ -425,6 +439,7 @@ async def kaiheila_send(
|
|||||||
doc = f.read()
|
doc = f.read()
|
||||||
url = await bot.upload_file(doc, file_name) # type:ignore
|
url = await bot.upload_file(doc, file_name) # type:ignore
|
||||||
result['content'] = url
|
result['content'] = url
|
||||||
|
del_file(path)
|
||||||
else:
|
else:
|
||||||
result['content'] = content
|
result['content'] = content
|
||||||
|
|
||||||
@ -468,6 +483,7 @@ async def telegram_send(
|
|||||||
with open(path, 'rb') as f:
|
with open(path, 'rb') as f:
|
||||||
doc = f.read()
|
doc = f.read()
|
||||||
result['document'] = doc
|
result['document'] = doc
|
||||||
|
del_file(path)
|
||||||
|
|
||||||
if content:
|
if content:
|
||||||
await bot.call_api('send_message', chat_id=target_id, **result)
|
await bot.call_api('send_message', chat_id=target_id, **result)
|
||||||
@ -566,3 +582,74 @@ async def feishu_send(
|
|||||||
await _send(_msg['data'], None)
|
await _send(_msg['data'], None)
|
||||||
else:
|
else:
|
||||||
await _send(content, image)
|
await _send(content, image)
|
||||||
|
|
||||||
|
|
||||||
|
async def onebot_v12_send(
|
||||||
|
bot: Bot,
|
||||||
|
content: Optional[str],
|
||||||
|
image: Optional[str],
|
||||||
|
node: Optional[List[Dict]],
|
||||||
|
file: Optional[str],
|
||||||
|
at_list: Optional[List[str]],
|
||||||
|
target_id: Optional[str],
|
||||||
|
target_type: Optional[str],
|
||||||
|
):
|
||||||
|
async def _send(content: Optional[str], image: Optional[str]):
|
||||||
|
async def send_file_message(params, file_type, file_id):
|
||||||
|
params["message"] = [
|
||||||
|
{"type": file_type, "data": {"file_id": file_id}}
|
||||||
|
]
|
||||||
|
await bot.call_api('send_message', **params)
|
||||||
|
|
||||||
|
if not any([content, image, file]):
|
||||||
|
return
|
||||||
|
|
||||||
|
params = {}
|
||||||
|
if target_type == "group":
|
||||||
|
params["detail_type"] = "group"
|
||||||
|
params["group_id"] = target_id
|
||||||
|
elif target_type == "direct":
|
||||||
|
params["detail_type"] = "private"
|
||||||
|
params["user_id"] = target_id
|
||||||
|
|
||||||
|
if content:
|
||||||
|
params["message"] = [
|
||||||
|
{"type": "text", "data": {"text": f"{content}"}}
|
||||||
|
]
|
||||||
|
if at_list and target_type == "group":
|
||||||
|
params["message"].insert(
|
||||||
|
0, {"type": "at", "data": {"user_id": f"{at_list[0]}"}}
|
||||||
|
)
|
||||||
|
await bot.call_api('send_message', **params)
|
||||||
|
elif image:
|
||||||
|
img_bytes = base64.b64decode(image.replace('base64://', ''))
|
||||||
|
timestamp = time.time()
|
||||||
|
file_name = f'{target_id}_{timestamp}.png'
|
||||||
|
up_data = await bot.call_api(
|
||||||
|
'upload_file',
|
||||||
|
type="data",
|
||||||
|
data=img_bytes,
|
||||||
|
name=f"{file_name}",
|
||||||
|
)
|
||||||
|
file_id = up_data['file_id']
|
||||||
|
await send_file_message(params, "image", file_id)
|
||||||
|
elif file:
|
||||||
|
file_name, file_content = file.split('|')
|
||||||
|
file_content = base64.b64decode(file)
|
||||||
|
up_data = await bot.call_api(
|
||||||
|
'upload_file',
|
||||||
|
type="data",
|
||||||
|
data=file_content,
|
||||||
|
name=f"{file_name}",
|
||||||
|
)
|
||||||
|
file_id = up_data['file_id']
|
||||||
|
await send_file_message(params, "file", file_id)
|
||||||
|
|
||||||
|
if node:
|
||||||
|
for _msg in node:
|
||||||
|
if _msg['type'] == 'image':
|
||||||
|
await _send(None, _msg['data'])
|
||||||
|
else:
|
||||||
|
await _send(_msg['data'], None)
|
||||||
|
else:
|
||||||
|
await _send(content, image)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user