PagerMaid_Plugins/groupword.py

62 lines
2.5 KiB
Python

import jieba
from wordcloud import WordCloud
from io import BytesIO
from os.path import exists
from os import makedirs
from collections import defaultdict
from requests import get
from pagermaid.utils import alias_command
from pagermaid.listener import listener
punctuation = {33: ' ', 34: ' ', 35: ' ', 36: ' ', 37: ' ', 38: ' ', 39: ' ', 40: ' ', 41: ' ', 42: ' ', 43: ' ',
44: ' ', 45: ' ', 46: ' ', 47: ' ', 58: ' ', 59: ' ', 60: ' ', 61: ' ', 62: ' ', 63: ' ', 64: ' ',
91: ' ', 92: ' ', 93: ' ', 94: ' ', 95: ' ', 96: ' ', 123: ' ', 124: ' ', 125: ' ', 126: ' ',
65311: ' ', 65292: ' ', 65281: ' ', 12304: ' ', 12305: ' ', 65288: ' ', 65289: ' ', 12289: ' ',
12290: ' ', 65306: ' ', 65307: ' ', 8217: ' ', 8216: ' ', 8230: ' ', 65509: ' ', 183: ' '}
@listener(is_plugin=True, outgoing=True, command=alias_command("groupword"),
description="拉取最新 300 条消息生成词云。")
async def group_word(context):
try:
await context.edit('正在生成中。。。')
except:
return
if not exists("plugins/groupword"):
makedirs("plugins/groupword")
if not exists("plugins/groupword/wqy-microhei.ttc"):
await context.edit('正在拉取中文字体文件。。。(等待时间请评估你的服务器)')
r = get('https://cdn.jsdelivr.net/gh/anthonyfok/fonts-wqy-microhei/wqy-microhei.ttc')
with open("plugins/groupword/wqy-microhei.ttc", "wb") as code:
code.write(r.content)
words = defaultdict(int)
count = 0
try:
async for msg in context.client.iter_messages(context.chat, limit=300):
if msg.id == context.id:
continue
if msg.text:
try:
for word in jieba.cut(msg.text.translate(punctuation)):
word = word.lower()
words[word] += 1
count += 1
except:
pass
except:
if count == 0:
try:
await context.edit('您已被 TG 官方限制。')
return
except:
return
image = WordCloud(font_path="plugins/wordcloud/wqy-microhei.ttc", width=800, height=400).generate_from_frequencies(
words).to_image()
stream = BytesIO()
image.save(stream, 'PNG')
try:
await context.client.send_message(context.chat, '', file=stream.getvalue())
await context.delete()
except:
return