尝试支持nonebot.adapter.dodo

This commit is contained in:
KimigaiiWuyi 2023-11-11 03:31:34 +08:00
parent 9de56d8166
commit 1173615975
2 changed files with 104 additions and 1 deletions

View File

@ -426,7 +426,30 @@ async def get_all_message(bot: Bot, ev: Event):
else:
logger.debug('[gsuid] 不支持该 Discord 事件...')
return
elif bot.adapter.get_name() == 'DoDo':
from nonebot.adapters.dodo import (
ChannelMessageEvent,
PersonalMessageEvent,
)
if isinstance(ev, ChannelMessageEvent):
user_type = 'group'
msg_id = ev.message_id
group_id = ev.channel_id
sender = {
'nickname': ev.personal.nick_name,
'avatar': ev.personal.avatar_url,
}
elif isinstance(ev, PersonalMessageEvent):
msg_id = ev.message_id
user_type = 'direct'
sender = {
'nickname': ev.personal.nick_name,
'avatar': ev.personal.avatar_url,
}
else:
logger.debug('[gsuid] 不支持该 DoDo 事件...')
return
else:
logger.debug(f'[gsuid] 不支持该 {bot.adapter.get_name()} 事件...')
return

View File

@ -270,8 +270,21 @@ class GsClient:
msg.target_id,
msg.target_type,
)
elif msg.bot_id == 'dodo':
await dodo_send(
bot,
content,
image,
node,
at_list,
markdown,
buttons,
msg.target_id,
msg.target_type,
group_id,
)
except Exception as e:
logger.error(e)
logger.exception(e)
except RuntimeError as e:
logger.error(e)
except ConnectionClosedError:
@ -656,6 +669,73 @@ async def guild_send(
await _send(content, image)
async def dodo_send(
bot: Bot,
content: Optional[str],
image: Optional[str],
node: Optional[List[Dict]],
at_list: Optional[List[str]],
markdown: Optional[str],
buttons: Optional[Union[List[Dict], List[List[Dict]]]],
target_id: Optional[str],
target_type: Optional[str],
group_id: Optional[str],
):
from nonebot.adapters.dodo.bot import Bot as dodobot
from nonebot.adapters.dodo.message import Message, MessageSegment
assert isinstance(bot, dodobot)
assert isinstance(target_id, str)
async def __send(message: Message):
if target_type == 'group':
await bot.send_to_channel(
channel_id=target_id,
message=message,
)
else:
if group_id:
await bot.send_to_personal(group_id, target_id, message)
async def _send(content: Optional[str], image: Optional[str]):
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
)
)
await __send(message)
message = Message()
if content:
message.append(MessageSegment.text(content))
if markdown:
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消息')
await __send(message)
if node:
for _msg in node:
if _msg['type'] == 'image':
image = _msg['data']
content = None
else:
image = None
content = _msg['data']
await _send(content, image)
else:
await _send(content, image)
def _bt(button: Dict):
from nonebot.adapters.qq.models import (
Action,