🎨 支持发送多列按钮

This commit is contained in:
KimigaiiWuyi 2023-10-11 21:53:37 +08:00
parent bd0aa78bdb
commit 44bd8b63b6
2 changed files with 71 additions and 42 deletions

View File

@ -208,6 +208,8 @@ class GsClient:
image,
node,
at_list,
markdown,
buttons,
msg.target_id,
msg.target_type,
msg.msg_id,
@ -429,7 +431,11 @@ async def onebot_red_send(
result_msg += MessageSegment.file(path)
if target_id:
await bot.send_message(chat_type, target_id, result_msg)
await bot.send_message(
chat_type, # type: ignore
target_id,
result_msg,
)
if file:
del_file(path) # type: ignore
@ -453,6 +459,8 @@ async def guild_send(
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],
msg_id: Optional[str],
@ -468,6 +476,11 @@ async def guild_send(
if at_list and target_type == 'group':
for at in at_list:
result['content'] += f'<@{at}>'
if markdown:
logger.warning('[gscore] qqguild暂不支持发送markdown消息')
if buttons:
logger.warning('[gscore] qqguild暂不支持发送buttons消息')
if target_type == 'group':
await bot.call_api(
'post_messages',
@ -499,45 +512,15 @@ async def guild_send(
await _send(content, image)
async def group_send(
bot: Bot,
content: Optional[str],
image: Optional[str],
node: Optional[List[Dict]],
markdown: Optional[str],
buttons: Optional[List[Dict]],
target_id: Optional[str],
target_type: Optional[str],
msg_id: Optional[str],
):
from nonebot.adapters.qq.bot import Bot as qqbot
from nonebot.adapters.qq.message import Message, MessageSegment
def _bt(button: Dict):
from nonebot.adapters.qq.models import (
Action,
Button,
Permission,
RenderData,
InlineKeyboard,
MessageKeyboard,
InlineKeyboardRow,
)
assert isinstance(bot, qqbot)
assert isinstance(target_id, str)
async def _send(content: Optional[str], image: Optional[str]):
message = Message()
if content:
message.append(MessageSegment.text(content))
if image:
message.append(MessageSegment.image(image))
if markdown:
message.append(MessageSegment.markdown(markdown))
if buttons:
_rows = []
_buttons = []
for button in buttons:
bt = Button(
return Button(
render_data=RenderData(
label=button['text'],
visited_label=button['pressed_text'],
@ -554,16 +537,62 @@ async def group_send(
data=button['data'],
),
)
_buttons.append(bt)
def _kb(buttons: Union[List[Dict], List[List[Dict]]]):
from nonebot.adapters.qq.models import (
InlineKeyboard,
MessageKeyboard,
InlineKeyboardRow,
)
_rows = []
_buttons = []
_buttons_rows = []
for button in buttons:
if isinstance(button, Dict):
_buttons.append(_bt(button))
if len(_buttons) >= 2:
_rows.append(InlineKeyboardRow(buttons=_buttons))
_buttons = []
else:
_buttons_rows.append([_bt(b) for b in button])
if _buttons:
_rows.append(InlineKeyboardRow(buttons=_buttons))
if _buttons_rows:
_rows.extend([InlineKeyboardRow(buttons=b) for b in _buttons_rows])
kb = MessageKeyboard(content=InlineKeyboard(rows=_rows))
return MessageKeyboard(content=InlineKeyboard(rows=_rows))
message.append(MessageSegment.keyboard(kb))
async def group_send(
bot: Bot,
content: Optional[str],
image: Optional[str],
node: Optional[List[Dict]],
markdown: Optional[str],
buttons: Optional[Union[List[Dict], List[List[Dict]]]],
target_id: Optional[str],
target_type: Optional[str],
msg_id: Optional[str],
):
from nonebot.adapters.qq.bot import Bot as qqbot
from nonebot.adapters.qq.message import Message, MessageSegment
assert isinstance(bot, qqbot)
assert isinstance(target_id, str)
async def _send(content: Optional[str], image: Optional[str]):
message = Message()
if content:
message.append(MessageSegment.text(content))
if image:
message.append(MessageSegment.image(image))
if markdown:
message.append(MessageSegment.markdown(markdown))
if buttons:
message.append(MessageSegment.keyboard(_kb(buttons)))
if target_type == 'group':
await bot.send_to_group(

View File

@ -23,7 +23,7 @@ build-backend = "poetry.core.masonry.api"
[tool.poetry]
name = "nonebot-plugin-genshinuid"
version = "4.3.0"
version = "4.3.1"
description = "支持OneBot(QQ)、OneBotV12、QQ频道、微信、KOOK开黑啦、Telegram电报、FeiShu飞书的全功能NoneBot2原神插件"
authors = ["KimigaiiWuyi <444835641@qq.com>"]
license = "GPL-3.0-or-later"