想做就做 其之一
零:闲话
经过我三四天的努力,安安机器人终于现实,也算是第一个好玩的小项目,现在稍微记录一下
(耽误了我好长时间的蔚蓝档案时间)
在能工智人 的引荐下,使用NapCat+Nonebot搭建的机器人
之前下载QQ群聊报告的时候已经下载了NapCat,刚开始捣鼓了半天的NapCat一键安装,要么是显示12002,要么就是404。之后找到说可以安装 NapCat.Shell.zip,遂进行尝试,打开后发现和之前下载的一模一样。
NapCat就告一段落。
几年前安装python的时候,把一个文件夹内的所有文件都零零散散的安装到我的D盘里面,之后删除没删干净。那个版本的python就烂在了那里,连带着我的py路径一块。
之后装了个新py才解决,但路径确确实实就烂在那里了。
所以之后下载Nonebot的代码都加上了python -m,而不是py -m
之后还算顺利,Nonebot也安装成功了,顺便安了一个echo复读,测试测试
一:NapCat 的安装与Nonebot的下载
就我来说NapCat.Shell.zip用的比较顺手,解压后双击launcher.bat,再扫码就可以
Nonebot需要用命令行下载
pipx install nb-cli
nb creat
模板选择bootstrap
名称自定义
适配器 选择Onebot V11
驱动器选择FastAPI
二:NapCat与Nonebot的连接
将NapCat终端的token复制下来,从二维码的上面找。
1.
在.env.prod文件中添加ONEBOT_ACCESS_TOKEN=你在NapCat中设置的access_token
2.
在终端中运行nb run启动NoneBot。观察控制台输出,找到类似FastAPI will start on ...的信息,记录下端口号
3.
在NapCap的WebUI中,找到第二个网络配置,并创建一个Websocket客户端
并在地址栏填写ws://127.0.0.1:你记录的端口号/onebot/v11/ws
至于名称那肯定是Anan_bot啦
4.
最后等待Nonebot终端连接就好,会有connect字样
三.插件的编写
在根目录下创建plugins文件夹,nb plugin create就可以,一定是根目录下有个叫plugins的文件夹。里面有__init__.py,在这里面编写插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 from nonebot import on_commandfrom nonebot import on_keywordfrom pathlib import Pathfrom .Anan_base import draw_text_autofrom nonebot.adapters import Messagefrom nonebot.params import CommandArgfrom nonebot.adapters.onebot.v11 import MessageSegmentfrom nonebot.plugin import PluginMetadatafrom nonebot.rule import to_mefrom PIL import ImageDrawfrom PIL import Imagehelp = on_command("help" ,rule=to_me())@help.handle() async def handle_birth (): await help .finish("以下为格式\n" \ "/painter 你的话 情绪\n" \"其中情绪包括:闭眼,病娇,害怕,激动,惊讶,开心,哭泣,脸红,生气,无语" )birth = on_command("你的生日" ,rule=to_me()) @birth.handle() async def handle_birth (): text="吾辈于2026.7.25诞生,感谢能工智人wpy的帮助与提供的铸币大头头像" bg=Image.open ("base.png" ) img_bytes = draw_text_auto( image_source=bg, top_left=(99 , 437 ), bottom_right=(420 , 603 ), text=text, font_path="C:/Users/weizh/Anan_bot/Font/FanMengWenRouNaiLaoTi/FanMengWenRouNaiLaoTi-2.ttf" ) await birth.finish(MessageSegment.image(img_bytes)) vfifty = on_keyword({"v我50" ,"v50" ,"疯狂星期四" ,"V50" ,"V我50" },priority=2 ,block=True ) @vfifty.handle() async def handle_vfifty (): text="V吾辈50" bg=Image.open ("base.png" ) img_bytes = draw_text_auto( image_source=bg, top_left=(99 , 437 ), bottom_right=(420 , 603 ), text=text, font_path="C:/Users/weizh/Anan_bot/Font/FanMengWenRouNaiLaoTi/FanMengWenRouNaiLaoTi-2.ttf" ) await vfifty.finish(MessageSegment.image(img_bytes)) painter = on_command("painter" ,to_me()) @painter.handle() async def handle_painter (message: Message = CommandArg( ) ): def FUN (flag ): FLAG=0 if (flag=="闭眼" ): bg=Image.open ("闭眼.png" ) FLAG=1 if (flag=="病娇" ): bg=Image.open ("病娇.png" ) FLAG=1 if (flag=="害怕" ): FLAG=1 bg=Image.open ("害怕.png" ) if (flag=="激动" ): FLAG=1 bg=Image.open ("激动.png" ) if (flag=="惊讶" ): FLAG=1 bg=Image.open ("惊讶.png" ) if (flag=="开心" ): FLAG=1 bg=Image.open ("开心.png" ) if (flag=="哭泣" ): FLAG=1 bg=Image.open ("哭泣.png" ) if (flag=="脸红" ): FLAG=1 bg=Image.open ("脸红.png" ) if (flag=="生气" ): FLAG=1 bg=Image.open ("生气.png" ) if (flag=="无语" ): FLAG=1 bg=Image.open ("无语.png" ) if (FLAG==0 ): bg=Image.open ("base.png" ) return bg prim = message.extract_plain_text().strip() lenth=len (prim) flag="" text="" for i in range (lenth-2 ,lenth): flag+=prim[i] print (lenth) print ("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" ) for i in range (0 ,lenth-3 ): if prim[i]=="我" : text=text+"吾辈" else : text=text+prim[i] if not text: text="你要说什么" bg=FUN(flag) img_bytes = draw_text_auto( image_source=bg, top_left=(99 , 437 ), bottom_right=(420 , 603 ), text=text, font_path="C:/Users/weizh/Anan_bot/Font/FanMengWenRouNaiLaoTi/FanMengWenRouNaiLaoTi-2.ttf" ) await painter.finish(MessageSegment.image(img_bytes))
其中的.Anan_base,是我直接引用的前人的项目
github ,直接复制进去就能运行
五.字体(可选)
字体建议下载一个,自带的太难看了
__init里面的font_path后面就是字体路径
六.使用
由于屎山代码写不好,所以暂时只推出了3种功能
1./help
它可以显示/painter的使用方法
2./你的生日
这是专门用于纪念wpy的帮助的
3.自动识别V50
如题,可以在代码中查看具体字样