mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-12 06:55:58 +08:00
✨ 支持kook
和dodo
的按钮发送
This commit is contained in:
parent
008a15163e
commit
37ce5e3b0c
@ -63,6 +63,7 @@ async def get_notice_message(bot: Bot, ev: Event):
|
||||
sp_user_type = None
|
||||
sp_bot_id = None
|
||||
self_id = str(bot.self_id)
|
||||
sender = {}
|
||||
msg_id = ''
|
||||
pm = 6
|
||||
|
||||
@ -82,14 +83,53 @@ async def get_notice_message(bot: Bot, ev: Event):
|
||||
|
||||
user_type = 'group' if group_id else 'direct'
|
||||
|
||||
if 'notice_type' in raw_data and raw_data['notice_type'] in [
|
||||
'group_upload',
|
||||
'offline_file',
|
||||
]:
|
||||
val = raw_data['file']['url']
|
||||
name = raw_data['file']['name']
|
||||
message = [Message('file', f'{name}|{val}')]
|
||||
# onebot_v11
|
||||
if bot.adapter.get_name() == 'OneBot V11':
|
||||
if 'notice_type' in raw_data and raw_data['notice_type'] in [
|
||||
'group_upload',
|
||||
'offline_file',
|
||||
]:
|
||||
val = raw_data['file']['url']
|
||||
name = raw_data['file']['name']
|
||||
message = [Message('file', f'{name}|{val}')]
|
||||
# onebot_v11
|
||||
else:
|
||||
return
|
||||
elif bot.adapter.get_name() == 'DoDo':
|
||||
from nonebot.adapters.dodo.event import CardMessageButtonClickEvent
|
||||
|
||||
if isinstance(ev, CardMessageButtonClickEvent):
|
||||
user_id = ev.user_id
|
||||
group_id = ev.channel_id
|
||||
msg_id = ev.event_id
|
||||
bot_id = 'dodo'
|
||||
message = [Message('text', ev.value)]
|
||||
sender = {
|
||||
'nickname': ev.personal.nick_name,
|
||||
'avatar': ev.personal.avatar_url,
|
||||
}
|
||||
user_type = 'group'
|
||||
else:
|
||||
return
|
||||
elif bot.adapter.get_name() == 'Kaiheila':
|
||||
from nonebot.adapters.kaiheila.event import CartBtnClickNoticeEvent
|
||||
|
||||
if isinstance(ev, CartBtnClickNoticeEvent):
|
||||
_ev = ev.extra.body
|
||||
assert _ev is not None
|
||||
user_id = _ev['user_id']
|
||||
group_id = _ev['target_id']
|
||||
msg_id = ev.msg_id
|
||||
bot_id = 'kaiheila'
|
||||
message = [Message('text', _ev['value'])]
|
||||
sender = {
|
||||
'nickname': _ev['user_info']['username'],
|
||||
'avatar': _ev['user_info']['avatar'],
|
||||
}
|
||||
user_type = (
|
||||
'direct' if _ev['channel_type'] == 'PERSON' else 'group'
|
||||
)
|
||||
else:
|
||||
return
|
||||
else:
|
||||
return
|
||||
|
||||
@ -99,6 +139,7 @@ async def get_notice_message(bot: Bot, ev: Event):
|
||||
user_type=sp_user_type if sp_user_type else user_type,
|
||||
group_id=group_id,
|
||||
user_id=user_id,
|
||||
sender=sender,
|
||||
content=message,
|
||||
msg_id=msg_id,
|
||||
user_pm=pm,
|
||||
@ -235,6 +276,7 @@ async def get_all_message(bot: Bot, ev: Event):
|
||||
group_id = ev.target_id
|
||||
else:
|
||||
user_type = 'direct'
|
||||
print(messages.__dict__)
|
||||
else:
|
||||
logger.debug('[gsuid] 不支持该 kaiheila 事件...')
|
||||
return
|
||||
@ -537,7 +579,7 @@ async def repeat_connect():
|
||||
|
||||
|
||||
def convert_message(_msg: Any, message: List[Message], index: int):
|
||||
if _msg.type == 'text':
|
||||
if _msg.type == 'text' or _msg.type == 'kmarkdown':
|
||||
data: str = (
|
||||
_msg.data['text'] if 'text' in _msg.data else _msg.data['content']
|
||||
)
|
||||
|
@ -235,6 +235,8 @@ class GsClient:
|
||||
content,
|
||||
image,
|
||||
file,
|
||||
markdown,
|
||||
buttons,
|
||||
node,
|
||||
msg.target_id,
|
||||
msg.target_type,
|
||||
@ -340,7 +342,7 @@ def del_file(path: Path):
|
||||
os.remove(path)
|
||||
|
||||
|
||||
def _vill_kb(index: int, button: Dict):
|
||||
def _villa_kb(index: int, button: Dict):
|
||||
from nonebot.adapters.villa.models import InputButton
|
||||
|
||||
return InputButton(
|
||||
@ -350,6 +352,32 @@ def _vill_kb(index: int, button: Dict):
|
||||
)
|
||||
|
||||
|
||||
def _dodo_kb(button: Dict):
|
||||
from nonebot.adapters.dodo.models import CardButton, ButtonClickAction
|
||||
|
||||
return CardButton(
|
||||
click=ButtonClickAction(value=button['data'], action='call_back'),
|
||||
name=button['text'],
|
||||
)
|
||||
|
||||
|
||||
def _kaiheila_kb(button: Dict):
|
||||
return {
|
||||
"type": "button",
|
||||
"theme": "info",
|
||||
"value": button['data'],
|
||||
"click": "return-val",
|
||||
"text": {"type": "plain-text", "content": button['text']},
|
||||
}
|
||||
|
||||
|
||||
def _kaiheila_kb_group(buttons: List[Dict]):
|
||||
return {
|
||||
"type": "action-group",
|
||||
"elements": [button for button in buttons],
|
||||
}
|
||||
|
||||
|
||||
async def villa_send(
|
||||
bot: Bot,
|
||||
content: Optional[str],
|
||||
@ -397,6 +425,7 @@ async def villa_send(
|
||||
|
||||
if markdown:
|
||||
logger.warning('[gscore] villa暂不支持发送markdown消息')
|
||||
|
||||
if buttons:
|
||||
bt = []
|
||||
bigc = []
|
||||
@ -404,19 +433,19 @@ async def villa_send(
|
||||
smc = []
|
||||
for index, button in enumerate(buttons):
|
||||
if isinstance(button, Dict):
|
||||
bt.append(_vill_kb(index, button))
|
||||
bt.append(_villa_kb(index, button))
|
||||
if isinstance(button, List):
|
||||
if len(button) == 1:
|
||||
bigc.append([_vill_kb(100 + index, button[0])])
|
||||
bigc.append([_villa_kb(100 + index, button[0])])
|
||||
elif len(button) == 2:
|
||||
_t = []
|
||||
for indexB, btn in enumerate(button):
|
||||
_t.append(_vill_kb(200 + index + indexB, btn))
|
||||
_t.append(_villa_kb(200 + index + indexB, btn))
|
||||
midc.append(_t)
|
||||
else:
|
||||
_t = []
|
||||
for indexC, btn in enumerate(button):
|
||||
_t.append(_vill_kb(300 + index + indexC, btn))
|
||||
_t.append(_villa_kb(300 + index + indexC, btn))
|
||||
if len(_t) >= 3:
|
||||
smc.append(_t)
|
||||
_t = []
|
||||
@ -761,6 +790,12 @@ async def dodo_send(
|
||||
):
|
||||
from nonebot.adapters.dodo.bot import Bot as dodobot
|
||||
from nonebot.adapters.dodo.message import Message, MessageSegment
|
||||
from nonebot.adapters.dodo.models import (
|
||||
CardText,
|
||||
TextData,
|
||||
CardImage,
|
||||
CardButtonGroup,
|
||||
)
|
||||
|
||||
assert isinstance(bot, dodobot)
|
||||
assert isinstance(target_id, str)
|
||||
@ -776,28 +811,62 @@ async def dodo_send(
|
||||
await bot.send_to_personal(group_id, target_id, message)
|
||||
|
||||
async def _send(content: Optional[str], image: Optional[str]):
|
||||
card = []
|
||||
message = Message()
|
||||
if image:
|
||||
img_bytes = base64.b64decode(image.replace('base64://', ''))
|
||||
image_return = await bot.set_resouce_picture_upload(file=img_bytes)
|
||||
message.append(
|
||||
MessageSegment.picture(
|
||||
image_return.url, image_return.width, image_return.height
|
||||
if image.startswith('base64://'):
|
||||
img_bytes = base64.b64decode(image.replace('base64://', ''))
|
||||
image_return = await bot.set_resouce_picture_upload(
|
||||
file=img_bytes
|
||||
)
|
||||
)
|
||||
await __send(message)
|
||||
message = Message()
|
||||
url = image_return.url
|
||||
w, h = image_return.width, image_return.height
|
||||
else:
|
||||
logger.warning('[gscore] dodo可能不支持发送URL图片, 请转为base64发送')
|
||||
url = image.replace('link://', '')
|
||||
w, h = 950, 1500
|
||||
|
||||
if buttons:
|
||||
card.append(CardImage(src=url))
|
||||
else:
|
||||
message.append(MessageSegment.picture(url, w, h))
|
||||
await __send(message)
|
||||
message = Message()
|
||||
|
||||
if content:
|
||||
message.append(MessageSegment.text(content))
|
||||
if buttons:
|
||||
card.append(
|
||||
CardText(text=TextData(type='plain-text', content=content))
|
||||
)
|
||||
else:
|
||||
message.append(MessageSegment.text(content))
|
||||
if markdown:
|
||||
message.append(MessageSegment.text(markdown))
|
||||
if buttons:
|
||||
card.append(
|
||||
CardText(text=TextData(type='dodo-md', content=markdown))
|
||||
)
|
||||
else:
|
||||
message.append(MessageSegment.text(markdown))
|
||||
if at_list and target_type == 'group':
|
||||
for at in at_list:
|
||||
message.append(MessageSegment.at_user(at))
|
||||
|
||||
if buttons:
|
||||
logger.warning('[gscore] DoDo暂不支持发送buttons消息')
|
||||
bt = []
|
||||
for button in buttons:
|
||||
if isinstance(button, Dict):
|
||||
bt.append(_dodo_kb(button))
|
||||
if len(bt) >= 2:
|
||||
card.append(CardButtonGroup(elements=bt))
|
||||
bt = []
|
||||
if isinstance(button, List):
|
||||
_t = []
|
||||
for i in button:
|
||||
_t.append(_dodo_kb(i))
|
||||
else:
|
||||
card.append(CardButtonGroup(elements=_t))
|
||||
_t = []
|
||||
message.append(MessageSegment.card(components=card))
|
||||
|
||||
if message:
|
||||
await __send(message)
|
||||
@ -1005,15 +1074,24 @@ async def kaiheila_send(
|
||||
content: Optional[str],
|
||||
image: Optional[str],
|
||||
file: Optional[str],
|
||||
markdown: Optional[str],
|
||||
buttons: Optional[Union[List[Dict], List[List[Dict]]]],
|
||||
node: Optional[List[Dict]],
|
||||
target_id: Optional[str],
|
||||
target_type: Optional[str],
|
||||
):
|
||||
from nonebot.adapters.kaiheila import Bot
|
||||
from nonebot.adapters.kaiheila.message import (
|
||||
Message,
|
||||
MessageSegment,
|
||||
_convert_to_card_message,
|
||||
)
|
||||
|
||||
assert isinstance(bot, Bot)
|
||||
assert isinstance(target_id, str)
|
||||
|
||||
async def _send(content: Optional[str], image: Optional[str]):
|
||||
message = Message()
|
||||
result = {}
|
||||
result['type'] = 1
|
||||
if image:
|
||||
@ -1023,27 +1101,58 @@ async def kaiheila_send(
|
||||
img_bytes = base64.b64decode(image.replace('base64://', ''))
|
||||
|
||||
url = await bot.upload_file(img_bytes, 'GSUID-TEMP')
|
||||
result['type'] = 2
|
||||
result['content'] = url
|
||||
elif file:
|
||||
message.append(MessageSegment.image(url))
|
||||
if file:
|
||||
file_name, file_content = file.split('|')
|
||||
path = Path(__file__).resolve().parent / file_name
|
||||
store_file(path, file_content)
|
||||
with open(path, 'rb') as f:
|
||||
doc = f.read()
|
||||
url = await bot.upload_file(doc, file_name)
|
||||
result['content'] = url
|
||||
message.append(MessageSegment.file(url))
|
||||
del_file(path)
|
||||
else:
|
||||
result['content'] = content
|
||||
if content:
|
||||
message.append(MessageSegment.text(content))
|
||||
if markdown:
|
||||
message.append(MessageSegment.KMarkdown(markdown))
|
||||
if buttons:
|
||||
if message:
|
||||
card_message = _convert_to_card_message(message)
|
||||
message = Message()
|
||||
card_json = json.loads(card_message.data['content'][1:-1])
|
||||
modules = card_json['modules']
|
||||
else:
|
||||
modules = []
|
||||
|
||||
bt = []
|
||||
for button in buttons:
|
||||
if isinstance(button, Dict):
|
||||
bt.append(_kaiheila_kb(button))
|
||||
if len(bt) >= 2:
|
||||
modules.append(_kaiheila_kb_group(bt))
|
||||
bt = []
|
||||
if isinstance(button, List):
|
||||
_t = []
|
||||
for i in button:
|
||||
_t.append(_kaiheila_kb(i))
|
||||
else:
|
||||
modules.append(_kaiheila_kb_group(_t))
|
||||
_t = []
|
||||
|
||||
cards = [
|
||||
{
|
||||
"type": "card",
|
||||
"theme": "none",
|
||||
"size": "lg",
|
||||
"modules": modules,
|
||||
}
|
||||
]
|
||||
message.append(MessageSegment.Card(cards))
|
||||
print(message)
|
||||
if target_type == 'group':
|
||||
api = 'message/create'
|
||||
result['channel_id'] = target_id
|
||||
await bot.send_channel_msg(channel_id=target_id, message=message)
|
||||
else:
|
||||
api = 'direct-message/create'
|
||||
result['target_id'] = target_id
|
||||
await bot.call_api(api, **result)
|
||||
await bot.send_private_msg(user_id=target_id, message=message)
|
||||
|
||||
if node:
|
||||
for _msg in node:
|
||||
|
Loading…
x
Reference in New Issue
Block a user