Xylow
2021-12-03T13:51:42+00:00
[img]https://img.nga.178.com/attachments/mon_202112/12/-7Q2p-17jvK24T3cSxc-ef.jpg[/img]
我本来只是边线小城月入一蛆的小码畜,一开始因为工作不太忙,本着有好东西就分享的理念,开了个沙雕图群,每天早上手动收集图片,然后发送到群里跟老哥们分享一下
后来发现不是每一个老哥都是上午有时间看图,下午的时候图已经被聊天记录刷到不知道哪里去了
于是又自学了python基于别人的QQ机器人框架开发了一只自动发沙雕图的机器人
经过多次更新迭代以后已经可以做到随时随地群里一个指令就能召唤10张图了,老哥们任何时候工作累了,就可以打开群发一句!沙雕图,立马就会收到10张新鲜的图
然而这种群一般不超过1个月就会开始发瑟图,3个月内被瑟图大量占据
最近为了开发别的机器人,沙雕图机器人坏了也没时间修,封号了没时间申诉
机器人不能动了大不了回到手动发图的年代,然而由于人力无法一直关注群里满足所有人的请求,逐渐有人开始公开或私聊喷我,沙雕群主不就该发图吗,不能发图开群做什么
这个群我实在开不动了,无奈只能解散,至少短期内是不会开新的群了,
机器人坏了挂着也就不修了,源代码放在后面,能力有限代码写的丑,但是至少能跑,有能力的老哥希望可以接着做下去
图都是我自己一张张收集的,没有API调用,图库太大也无法上传
只有Q群BOT框架官方地址和我自己手敲的源码
[url]https://v2.nonebot.dev/[/url]
我本来只是边线小城月入一蛆的小码畜,一开始因为工作不太忙,本着有好东西就分享的理念,开了个沙雕图群,每天早上手动收集图片,然后发送到群里跟老哥们分享一下
后来发现不是每一个老哥都是上午有时间看图,下午的时候图已经被聊天记录刷到不知道哪里去了
于是又自学了python基于别人的QQ机器人框架开发了一只自动发沙雕图的机器人
经过多次更新迭代以后已经可以做到随时随地群里一个指令就能召唤10张图了,老哥们任何时候工作累了,就可以打开群发一句!沙雕图,立马就会收到10张新鲜的图
然而这种群一般不超过1个月就会开始发瑟图,3个月内被瑟图大量占据
最近为了开发别的机器人,沙雕图机器人坏了也没时间修,封号了没时间申诉
机器人不能动了大不了回到手动发图的年代,然而由于人力无法一直关注群里满足所有人的请求,逐渐有人开始公开或私聊喷我,沙雕群主不就该发图吗,不能发图开群做什么
这个群我实在开不动了,无奈只能解散,至少短期内是不会开新的群了,
机器人坏了挂着也就不修了,源代码放在后面,能力有限代码写的丑,但是至少能跑,有能力的老哥希望可以接着做下去
图都是我自己一张张收集的,没有API调用,图库太大也无法上传
只有Q群BOT框架官方地址和我自己手敲的源码
[url]https://v2.nonebot.dev/[/url]
#发送本地沙雕图
sd_img = on_command("!沙雕图", rule=None)
@sd_img.handle()
async def handle_send(bot: Bot, event: Event, state: T_State):
get_id = str(event.get_session_id())
get_msg = str(event.get_message())
if get_msg == "":
get_msg = 10
img_len = int(get_msg)
if int(img_len) > 10:
img_len = 10
if int(img_len) < 1:
img_len = 1
print(img_len)
for i in range(0, img_len):
try:
# print(await get_floder_lst())
# print('反回的图片信息2', get_img_lst)
get_img_base64 = img_goto_base64(get_floder_lst())
print('已接收返回的base64代码')
# 将base64格式图片上传到服务器并返回地址
# url = "http://localhost:40001/uploadfile/readbase64.php"
# data = {"file": get_img_base64}
# r = requests.post(url, data=json.dumps(data))
# print('沙雕图接口返回:', r)
url = "http://localhost:40001/uploadfile/readbase64.php"
res = requests.post(url, data={"file": get_img_base64})
print('接口返回数据', res.text)
rst = json.loads(res.text)
imgurl = 'http://'+rst['url1']
print('返回的图片地址', imgurl)
img = MessageSegment.image(imgurl)
await bot.send(event, img)
# if child_img_lst.split('.'):
# print(1)
# else:
# child_img = ''
# print(child_img_lst)
# imgurl = await getimglist()
# print("沙雕图",imgurl)
# img = MessageSegment.image(imgurl)
# await bot.send(event, img)
# await ping.finish("")
except:
await ping.finish("第"+str(int(i)+1)+"张图之后发送失败,请稍后重试")
await ping.finish('达成成就,连发10张沙雕图没出BUG!')
#随机读取一个图片文件夹列表
def get_floder_lst():
# 随机读取一个图库地址
dizhi_folder = list(sql_dql("SELECT * FROM img_folder"))
dizhi_folder_len = len(dizhi_folder)
dizhi_folder_i = random.randint(0, dizhi_folder_len-1)
dizhi_folder_new = dizhi_folder[dizhi_folder_i][1]
print(dizhi_folder, dizhi_folder_len, dizhi_folder_i, dizhi_folder_new)
child_folder_lst = os.listdir(dizhi_folder_new)
dizhi_folder_child = dizhi_folder_new + '/' + child_folder_lst[random.randint(0, len(child_folder_lst)-1)]
child_folder_lst_2 = os.listdir(dizhi_folder_child)
child_img_box = dizhi_folder_child+'/'+child_folder_lst_2[random.randint(0, len(child_folder_lst_2)-1)]
# 递归直到返回目标数据
img_url = ['', '']
if len(child_img_box.split('.')) == 1:
child_img_lst = os.listdir(child_img_box)
if len(child_img_lst) > 0:
img_url[0] = child_img_box
img_url[1] = child_img_lst
# 0为文件夹地址,1为文件夹中的图片列表
print('返回的图片信息', img_url)
return img_url
else:
return get_floder_lst()
else:
return get_floder_lst()
#随机读取一张图片并转为base64格式
def img_goto_base64(get_img_lst):
# img_name =
# 最终图片地址+图片名
# print('get_img_lst', get_img_lst)
img_path = get_img_lst[0] + '/' + rand_img(get_img_lst[1])
print('文件大小', get_FileSize(img_path))
if get_FileSize(img_path) > 6035008:
return img_goto_base64(get_img_lst)
else:
with open(img_path, "rb") as f: # 转为二进制格式
base64_data = base64.b64encode(f.read()) # 使用base64进行加密
base64_data = 'data:image/jpg;base64,' + str(base64_data, 'utf8')
# print('最终返回的base64:', base64_data)
#
# file = open('C:\\Users\\BX3261\\Desktop\\001.txt', 'wt')
# file.write(str(base64_data))
# file.close()
#
print(img_path)
print('base代码已输出')
return base64_data
return img_path
# 从图片和文件夹组合中随机读取一张图片
def rand_img(get_img_lst):
# print('最终文件列表', get_img_lst)
img_name = get_img_lst[random.randint(0, len(get_img_lst)-1)]
if len(img_name.split('.')) == 2:
print('rand_img-imgname', img_name)
return img_name
else:
rand_img(get_img_lst)
def get_FileSize(filePath):
fsize = os.path.getsize(filePath)
# fsize = fsize / float(1024 * 1024)
return round(fsize, 2)
sd_img = on_command("!沙雕图", rule=None)
@sd_img.handle()
async def handle_send(bot: Bot, event: Event, state: T_State):
get_id = str(event.get_session_id())
get_msg = str(event.get_message())
if get_msg == "":
get_msg = 10
img_len = int(get_msg)
if int(img_len) > 10:
img_len = 10
if int(img_len) < 1:
img_len = 1
print(img_len)
for i in range(0, img_len):
try:
# print(await get_floder_lst())
# print('反回的图片信息2', get_img_lst)
get_img_base64 = img_goto_base64(get_floder_lst())
print('已接收返回的base64代码')
# 将base64格式图片上传到服务器并返回地址
# url = "http://localhost:40001/uploadfile/readbase64.php"
# data = {"file": get_img_base64}
# r = requests.post(url, data=json.dumps(data))
# print('沙雕图接口返回:', r)
url = "http://localhost:40001/uploadfile/readbase64.php"
res = requests.post(url, data={"file": get_img_base64})
print('接口返回数据', res.text)
rst = json.loads(res.text)
imgurl = 'http://'+rst['url1']
print('返回的图片地址', imgurl)
img = MessageSegment.image(imgurl)
await bot.send(event, img)
# if child_img_lst.split('.'):
# print(1)
# else:
# child_img = ''
# print(child_img_lst)
# imgurl = await getimglist()
# print("沙雕图",imgurl)
# img = MessageSegment.image(imgurl)
# await bot.send(event, img)
# await ping.finish("")
except:
await ping.finish("第"+str(int(i)+1)+"张图之后发送失败,请稍后重试")
await ping.finish('达成成就,连发10张沙雕图没出BUG!')
#随机读取一个图片文件夹列表
def get_floder_lst():
# 随机读取一个图库地址
dizhi_folder = list(sql_dql("SELECT * FROM img_folder"))
dizhi_folder_len = len(dizhi_folder)
dizhi_folder_i = random.randint(0, dizhi_folder_len-1)
dizhi_folder_new = dizhi_folder[dizhi_folder_i][1]
print(dizhi_folder, dizhi_folder_len, dizhi_folder_i, dizhi_folder_new)
child_folder_lst = os.listdir(dizhi_folder_new)
dizhi_folder_child = dizhi_folder_new + '/' + child_folder_lst[random.randint(0, len(child_folder_lst)-1)]
child_folder_lst_2 = os.listdir(dizhi_folder_child)
child_img_box = dizhi_folder_child+'/'+child_folder_lst_2[random.randint(0, len(child_folder_lst_2)-1)]
# 递归直到返回目标数据
img_url = ['', '']
if len(child_img_box.split('.')) == 1:
child_img_lst = os.listdir(child_img_box)
if len(child_img_lst) > 0:
img_url[0] = child_img_box
img_url[1] = child_img_lst
# 0为文件夹地址,1为文件夹中的图片列表
print('返回的图片信息', img_url)
return img_url
else:
return get_floder_lst()
else:
return get_floder_lst()
#随机读取一张图片并转为base64格式
def img_goto_base64(get_img_lst):
# img_name =
# 最终图片地址+图片名
# print('get_img_lst', get_img_lst)
img_path = get_img_lst[0] + '/' + rand_img(get_img_lst[1])
print('文件大小', get_FileSize(img_path))
if get_FileSize(img_path) > 6035008:
return img_goto_base64(get_img_lst)
else:
with open(img_path, "rb") as f: # 转为二进制格式
base64_data = base64.b64encode(f.read()) # 使用base64进行加密
base64_data = 'data:image/jpg;base64,' + str(base64_data, 'utf8')
# print('最终返回的base64:', base64_data)
#
# file = open('C:\\Users\\BX3261\\Desktop\\001.txt', 'wt')
# file.write(str(base64_data))
# file.close()
#
print(img_path)
print('base代码已输出')
return base64_data
return img_path
# 从图片和文件夹组合中随机读取一张图片
def rand_img(get_img_lst):
# print('最终文件列表', get_img_lst)
img_name = get_img_lst[random.randint(0, len(get_img_lst)-1)]
if len(img_name.split('.')) == 2:
print('rand_img-imgname', img_name)
return img_name
else:
rand_img(get_img_lst)
def get_FileSize(filePath):
fsize = os.path.getsize(filePath)
# fsize = fsize / float(1024 * 1024)
return round(fsize, 2)