nikissXI / nonebot_plugins

58 stars 14 forks source link

一些小建议 #24

Closed bandageshi closed 1 year ago

bandageshi commented 1 year ago

之前写过一个gpt插件,所以提点可能可以改进这个插件的建议 ①将消息中的at转换为用户名 ②将消息格式转化为用户昵称(优先使用群昵称,若没有则使用qq昵称):消息内容 ③使用html_render插件将封控文字消息转化为图片发送出去 ④涉政敏感词替换,在两个地方,及用户输入内容和生成内容进行检查,若存在敏感词则替换为默认内容发送 ⑤鉴于这个插件可以通过at直接调用,可以对一些qq机器人进行屏蔽,防止出现循环回话,如高频出现的qq管家进群欢迎,qq管家qq号为2854196310

以下是一些简单代码实现:

async def at_to_text(bot,at_text,group_id):
    at_list = re.findall("CQ:at,qq=(.*?)]",at_text)
    text = at_text
    for at in at_list:
        nickname = await id_to_nickname(bot,at,group_id=group_id)
        text = text.replace(f"[CQ:at,qq={at}]",nickname)
    return text

该函数实现将消息中的at转化为昵称

async def id_to_nickname(bot,at,group_id=None):
    if group_id is not None:
        res = await bot.get_group_member_info(group_id=group_id, user_id=at)
        nickname = res.get('card')
        if nickname == "":
            nickname = res.get("nickname")
    else:
        res = await bot.get_stranger_info(user_id=at)
        nickname = res.get("nickname")
    return nickname

该函数实现将qq_id转化为群昵称或qq昵称

以上是一些简单的建议,希望能够有所帮助!

nikissXI commented 1 year ago

①不是很理解,为什么要把at转为用户名,直接艾特用户不是更好的告诉用户这是回谁的信息吗 ②同上 ③我可以用pil生成,下个版本加上,白底黑字就完事,用不着装个无头浏览器 ④东西,也可以整,弄一个选项,用户自己加关键字吧 ⑤可以有

bandageshi commented 1 year ago

①不是很理解,为什么要把at转为用户名,直接艾特用户不是更好的告诉用户这是回谁的信息吗 ②同上 ③我可以用pil生成,下个版本加上,白底黑字就完事,用不着装个无头浏览器 ④东西,也可以整,弄一个选项,用户自己加关键字吧 ⑤可以有

②因为有时候会对话会涉及到用户信息的问题,比如一个昵称为xxx的人问我是谁,或者涉及到群组内对话时多个人共享聊天时身份区分问题,所以在前面加昵称告诉chatgpt是谁问的,而且chatgpt针对性的回复也可以可以增加使用体验。 ①因为还是用最简单的例子来说,一个群友at另外一个群友说他是谁,chatgpt就无法理解内容,转化为用户昵称可以增加回复准确性 总体来说前两个都是在增加使用体验

bandageshi commented 1 year ago

①不是很理解,为什么要把at转为用户名,直接艾特用户不是更好的告诉用户这是回谁的信息吗 ②同上 ③我可以用pil生成,下个版本加上,白底黑字就完事,用不着装个无头浏览器 ④东西,也可以整,弄一个选项,用户自己加关键字吧 ⑤可以有

每个消息指的都是prompt,建议是对用户给的消息再加工