import asyncio
from multiprocessing import managers
from nonebot import on_command
from nonebot.matcher import Matcher
from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message, MessageSegment
from nonebot.params import CommandArg, RawCommand
from .drawer import get_token, get_taskId, get_img
from .limiter import limiter
from .config import wenxin_config
drawer = on_command("画画", aliases={'画画帮助', '古风' , '油画', '水彩画', '卡通画', '二次元', '浮世绘', '蒸汽波艺术', 'low poly', '像素风格', '概念艺术', '未来主义', '赛博朋克', '写实风格', '洛丽塔风格', '巴洛克风格', '超现实主义'}, priority=5, block=True)
@drawer.handle()
async def _(matcher: Matcher, event: GroupMessageEvent, command = RawCommand(), args = CommandArg()):
# 判断是否触发帮助 或 绘画主题任务描述为空
if command == '画画帮助' or str(args).strip() == '':
help_msg = '当前支持古风、油画、水彩画、卡通画、二次元、浮世绘、蒸汽波艺术、low poly、像素风格、概念艺术、未来主义、赛博朋克、写实风格、洛丽塔风格、巴洛克风格、超现实主义\n主要擅长风景写意画,请尽量给定“比较明确的意象”\n如: 油画 江上落日与晚霞'
await matcher.finish(help_msg)
return
# 判断用户是否触发频率限制
user_id = event.user_id
managers = wenxin_config.wenxin_manager_list # 管理员列表(不触发冷却时间限制)
if not limiter.check(user_id):
left_time = limiter.left_time(user_id)
await matcher.finish(f'咦,人类,你刚画了一次唉。需要等待{left_time}秒再找俺画画!冷却期间可临时到网页(https://wenxin.baidu.com/moduleApi/ernieVilg?from=baicai)进行体验哦')
return
# 启动画画任务
command_str = str(command)
style = '油画' # 绘画时style默认为油画
style_list = ['古风' , '油画', '水彩画', '卡通画', '二次元', '浮世绘', '蒸汽波艺术', 'low poly', '像素风格', '概念艺术', '未来主义', '赛博朋克', '写实风格', '洛丽塔风格', '巴洛克风格', '超现实主义']
for keyword in style_list:
if keyword in command_str:
style = keyword
break
text = args # 绘画的任务描述文字
await matcher.send(f'飞桨文心AI开始绘制主题为“{text}”的{style}(预计2-5分钟)...')
try:
access_token = await get_token()
taskId = await get_taskId(access_token, text, style)
if taskId == None:
await matcher.finish(f'主题“{text}”违规,请重新给定任务描述')
return
if not str(user_id) in managers:
limiter.start_cd(user_id) # 启动冷却时间限制
await asyncio.sleep(30) # 模型画画大概要30秒,等待一会儿
images = await get_img(access_token, taskId)
if images == None:
await matcher.finish(f'无法绘制主题为“{text}”的{style}!')
return
image_count = wenxin_config.wenxin_image_count # 每次发送的图片数量
# 判断图片数量是否少于配置的图片数量
if len(images) < image_count:
image_count = len(images)
msg = Message(f'文心原创绘画:主题为“{text}”的{style}')
for i in range(image_count):
msg += MessageSegment.image(images[i]['image'])
await matcher.finish(msg)
except Exception as e:
print(e)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
python基于文心大模型的AI机器人画画插件.zip (6个子文件)
python基于文心大模型的AI机器人画画插件
nonebot-plugin-drawer-main
nonebot-plugin-drawer-main
LICENSE 1KB
nonebot_plugin_drawer
__init__.py 4KB
limiter.py 687B
drawer.py 2KB
config.py 555B
pyproject.toml 689B
共 6 条
- 1
资源评论
- 微道道2023-11-18资源内容总结的很到位,内容详实,很受用,学到了~
GeekyGuru
- 粉丝: 1675
- 资源: 1099
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功