Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/modules/ptt/__init__.py

111 lines
No EOL
3.7 KiB
Python

import asyncio
import os
import re
import traceback
import uuid
from io import BytesIO
from PIL import Image, ImageDraw, ImageFont, ImageFilter
from graia.application import MessageChain
from graia.application.message.elements.internal import Image as Img
def text_border(draw, x, y, text, shadowcolor, fillcolor, font):
x = x + 3
y = y + 3
# thin border
draw.text((x - 3, y), text, font=font, fill=shadowcolor)
draw.text((x + 3, y), text, font=font, fill=shadowcolor)
draw.text((x, y - 3), text, font=font, fill=shadowcolor)
draw.text((x, y + 3), text, font=font, fill=shadowcolor)
# thicker border
draw.text((x - 3, y - 3), text, font=font, fill=shadowcolor)
draw.text((x + 3, y - 3), text, font=font, fill=shadowcolor)
draw.text((x - 3, y + 3), text, font=font, fill=shadowcolor)
draw.text((x + 3, y + 3), text, font=font, fill=shadowcolor)
# now draw the text over it
draw.text((x, y), text, font=font, fill=fillcolor)
async def pttimg(kwargs):
message = kwargs['trigger_msg']
message = re.sub('ptt ', '', message)
# ptt
if message == '--':
ptt = -1
else:
ptt = float(message)
if ptt >= 12.50:
pttimg = 6
elif ptt >= 12.00:
pttimg = 5
elif ptt >= 11.00:
pttimg = 4
elif ptt >= 10.00:
pttimg = 3
elif ptt >= 7.00:
pttimg = 2
elif ptt >= 3.50:
pttimg = 1
elif ptt >= 0:
pttimg = 0
else:
pttimg = 'off'
pttimgr = Image.open(os.path.abspath(f'./assets/ptt/rating_{str(pttimg)}.png'))
ptttext = Image.new("RGBA", (119, 119))
font1 = ImageFont.truetype(os.path.abspath('./assets/Fonts/Exo-SemiBold.ttf'), 49)
font2 = ImageFont.truetype(os.path.abspath('./assets/Fonts/Exo-SemiBold.ttf'), 33)
if ptt >= 0:
rawptt = str(ptt).split('.')
if len(rawptt) < 2:
ptt1 = rawptt[0]
ptt2 = '00'
else:
ptt1 = rawptt[0]
ptt2 = rawptt[1]
if len(ptt2) < 2:
ptt2 += '0'
ptttext_width, ptttext_height = ptttext.size
font1_width, font1_height = font1.getsize(ptt1 + '.')
font2_width, font2_height = font2.getsize(ptt2)
print(font1_width, font1_height)
print(font2_width, font2_height)
pttimg = Image.new("RGBA", (font1_width + font2_width + 6, font1_height + 6))
drawptt = ImageDraw.Draw(pttimg)
text_border(drawptt, 0, 0,
ptt1 + '.',
'#52495d', 'white', font=font1)
print(int(int(font1_height) - int(font2_height)))
text_border(drawptt, font1_width, 16, ptt2,
'#52495d', 'white', font=font2)
else:
ptt = '--'
ptttext_width, ptttext_height = ptttext.size
font1_width, font1_height = font1.getsize(ptt)
pttimg = Image.new("RGBA", (font1_width + 6, font1_height + 6))
drawptt = ImageDraw.Draw(pttimg)
text_border(drawptt, 0, 0,
ptt,
'#52495d', 'white', font=font1)
pttimg_width, pttimg_height = pttimg.size
ptttext.alpha_composite(pttimg, (int((ptttext_width - pttimg_width) / 2), int((ptttext_height - pttimg_height) / 2) - 11))
pttimgr.alpha_composite(ptttext, (0, 0))
if __name__ == '__main__':
pttimgr.show()
else:
bytesIO = BytesIO()
pttimgr.save(bytesIO, format='PNG')
imgchain = MessageChain.create([Img.fromUnsafeBytes(bytesIO.getvalue())])
from core.template import sendMessage
await sendMessage(kwargs, imgchain)
command = {'ptt': pttimg}
help = {'ptt': {'help': '~ptt <int> - 生成ptt图片。'}}
if __name__ == '__main__':
kwargs = {}
kwargs['trigger_msg'] = 'ptt -1'
asyncio.run(pttimg(kwargs))