Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: 使用MessageSegment消息段与其它消息段或文本组合时,换行符号会消失 #30

Closed
4 tasks done
2659170494 opened this issue Sep 19, 2024 · 7 comments
Labels
bug Something isn't working

Comments

@2659170494
Copy link

确认项

  • 问题的标题明确
  • 我翻阅过其他的 issue 并且找不到类似的问题
  • 我已经阅读了相关文档 并仍然认为这是一个 Bug
  • 我已经尝试过在最新的代码中修复这个问题

操作系统

Windows

Python 版本

3.8.10

NoneBot 版本

2.2.0

适配器

0.11.5

协议端

Chronocat 0.2.16

描述问题

很抱歉又重开了这个issue,由于学业问题我并没有多少关注我的机器人。
本issue是 #18 的后续

根据我的测试,这个问题仍然没有解决。

左侧窗口打印的是该消息正常输出的格式,右侧是实际格式。
左侧的内容是用print打印出来的,说明该消息格式是没有什么问题的。
image

后来我尝试寻找替代方案,发现在satori文档中可以使用<br/>提供换行。
且我查看了message.py下的定义,便用MessageSegment.br()替代了"\n"

可当我尝试之后,左侧的也确实打印出了messagesegment返回了
,但是发送过后这并没有用途
image

我不知道这是适配器的问题还是协议端的问题,我检查过协议端的日志。但是在他们的日志中并不会打印出类似换行符这种的特殊符号。无法确认是不是协议端的问题

复现步骤

这是复现的代码:

import nonebot
from nonebot import on_startswith,on_message
from nonebot.adapters.satori import MessageEvent, MessageSegment
from nonebot.adapters import Bot

test_get = on_startswith({"测试薄荷本兽","测试菜单"})
br_get = on_startswith({"测试绿色耀西","测试彩蛋"})
get_back = on_message()

BotName = "薄荷本兽"
menulist = ['---分组1---',BotName+',功能1 ---测试功能1',BotName+',功能2 ---测试功能2','---分组2---',BotName+',功能3 ---测试功能1',BotName+',功能4 ---测试功能2']
MintBotVersion = 'V2 2024.09.20'

@test_get.handle()
async def Mint_menu(bot: Bot,event:MessageEvent):
    print('收到测试指令')
    menumessage = MessageSegment(type="chronocat:face",data={"id":12})+MessageSegment.text('嗷呜,欢迎使用'+BotName+'机器人,这是我可以做的事情OwO:')
    for menulistline in menulist:
        if menulistline[0:3] == "---":
            menumessage = menumessage + "\n"+menulistline
        elif menulistline[0:1].isdigit() == True:
            menumessage = menumessage + "\n"+menulistline
        else:
            menumessage = menumessage + "\n"+MessageSegment(type="chronocat:face",data={"id":66})+menulistline
    menumessage = menumessage+"\n"+"-------------------"+"\n"+MintBotVersion
    print(menumessage)
    await test_get.send(menumessage)
    await test_get.finish()

@br_get.handle()
async def Mint_menu(bot: Bot,event:MessageEvent):
    print('收到Br指令')
    menumessage = MessageSegment(type="chronocat:face",data={"id":12})+MessageSegment.text('嘿咻,欢迎系用'+BotName+'机气人,这是我不可以做的事情UwU:')
    for menulistline in menulist:
        if menulistline[0:3] == "---":
            menumessage = menumessage + MessageSegment.br()+menulistline
        elif menulistline[0:1].isdigit() == True:
            menumessage = menumessage + MessageSegment.br()+menulistline
        else:
            menumessage = menumessage + MessageSegment.br()+MessageSegment(type="chronocat:face",data={"id":66})+menulistline
    menumessage = menumessage+MessageSegment.br()+"-------------------"+MessageSegment.br()+MintBotVersion
    print(menumessage)
    await br_get.send(menumessage)
    await br_get.finish()

@get_back.handle()
async def Mint_menu(bot: Bot,event:MessageEvent):
    get_msg=str(event.get_message()) #没想到过这个不是str类型,然后后面的判断直接失败了
    print(get_msg)
    if get_msg[0:4] == "测试回弹":
        print("收到回弹指令")
        get_msg = get_msg.replace("测试回弹 ","")
        get_msg = get_msg.replace("测试回弹","")
        print("发送消息:"+get_msg)
        await get_back.send(get_msg)

期望的结果

我不知道我的这个br的调用方式是否正确,如果是bug的话还望能修复一下。
以及关于MessageSegment消息段与其它消息段或文本组合造成的特殊符号丢失😢

截图或日志

已在问题描述中包含

Nonebot 配置项

@2659170494 2659170494 added the bug Something isn't working label Sep 19, 2024
@RF-Tar-Railt
Copy link
Member

使用\n那里
print(repr(str(message))
print(repr("".join(str(i) for i in message)))

@2659170494
Copy link
Author

使用\n那里 print(repr(str(message)) print(repr("".join(str(i) for i in message)))

您好,感谢这么晚了还回复

根据浮现代码,我将这这段代码:

    menumessage = menumessage+MessageSegment.br()+"-------------------"+MessageSegment.br()+MintBotVersion
    print(menumessage)
    await br_get.send(menumessage)
    await br_get.finish()

替换成了:

    menumessage = menumessage+"\n"+"-------------------"+"\n"+MintBotVersion
    #print(menumessage)
    print("-----------------------repr 1-----------------------")
    print(repr(str(menumessage)))
    print("-----------------------repr 2-----------------------")
    print(repr("".join(str(i) for i in menumessage)))
    await test_get.send(menumessage)
    await test_get.finish()

这是运行的结果:
image

@RF-Tar-Railt
Copy link
Member

去掉face后是否正常

@2659170494
Copy link
Author

去掉face后是否正常

是的
image

@RF-Tar-Railt
Copy link
Member

RF-Tar-Railt commented Sep 19, 2024

那么就是chronocat的bug了
你可以先用emoji替代face

@2659170494
Copy link
Author

2659170494 commented Sep 19, 2024

使用\n那里 print(repr(str(message)) print(repr("".join(str(i) for i in message)))

您好,感谢这么晚了还回复

根据浮现代码,我将这这段代码:

    menumessage = menumessage+MessageSegment.br()+"-------------------"+MessageSegment.br()+MintBotVersion
    print(menumessage)
    await br_get.send(menumessage)
    await br_get.finish()

替换成了:

    menumessage = menumessage+"\n"+"-------------------"+"\n"+MintBotVersion
    #print(menumessage)
    print("-----------------------repr 1-----------------------")
    print(repr(str(menumessage)))
    print("-----------------------repr 2-----------------------")
    print(repr("".join(str(i) for i in menumessage)))
    await test_get.send(menumessage)
    await test_get.finish()

这是运行的结果: image

我刚刚注意到了nonebot输出的发送后的日志,发现发送后的消息中,和face标签组合过的消息段的\n都没了。没有的是存在的。
但是至于这个日志是chronocat返回回来的还是nonebot自己的我就不确定了:
09-20 01:50:19 [SUCCESS] nonebot | Satori 3651443909 | [message-created]: Message 7490630054853435754 from 薄荷本兽🅱🅾🆃(982413204)@[绿色呦西的杂货是官机器人群&哼唧哼唧:982413204]: [Custom(type='chronocat:face', data={'id': '12', 'name': '[调皮]', 'platform': 'chronocat'}, _children=[]), Text(type='text', data={'text': '嗷呜,欢迎使用薄荷本兽机器人,这是我可以做的事情OwO: \n ---分组1---', 'styles': {}}, _children=[]), Custom(type='chronocat:face', data={'id': '66', 'name':'[爱心]', 'platform': 'chronocat'}, _children=[]), Text(type='text', data={'text': '薄荷本兽,功能1 ---测试功能1', 'styles': {}}, _children=[]), Custom(type='chronocat:face', data={'id': '66', 'name': '[爱心]', 'platform': 'chronocat'}, _children=[]), Text(type='text', data={'text': '薄荷本兽,功能2 ---测试功能2 \n ---分组2---', 'styles': {}}, _children=[]), Custom(type='chronocat:face', data={'id': '66', 'name': '[爱心]', 'platform': 'chronocat'}, _children=[]), Text(type='text', data={'text': '薄荷本兽,功能3 ---测试功能1', 'styles': {}}, _children=[]), Custom(type='chronocat:face', data={'id': '66', 'name': '[爱心]', 'platform': 'chronocat'}, _children=[]), Text(type='text', data={'text': '薄荷本兽,功能4 ---测试功能2 \n ------------------- \n V2 2024.09.20', 'styles': {}}, _children=[])]
image

@RF-Tar-Railt 不过谢谢大佬回复,我或许明天会跟chronocat提issue看看

@2659170494
Copy link
Author

抱歉打扰了,看了一下chronocat的issue。确实是它们的问题😢
chrononeko/bugtracker#37

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants