diff --git a/groupword.py b/groupword.py new file mode 100644 index 0000000..baedb34 --- /dev/null +++ b/groupword.py @@ -0,0 +1,61 @@ +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 diff --git a/groupword/wqy-microhei.ttc b/groupword/wqy-microhei.ttc new file mode 100644 index 0000000..4cbb7c5 Binary files /dev/null and b/groupword/wqy-microhei.ttc differ diff --git a/list.json b/list.json index 34dc9cd..3e7d960 100644 --- a/list.json +++ b/list.json @@ -509,6 +509,16 @@ "supported": true, "des-short": "踢出并ban群成员", "des": "命令:(在群内回复该人)-fuck 或 -fuck " + }, + { + "name": "groupword", + "version": "1.00", + "section": "chat", + "maintainer": "xtaodada", + "size": "2.41 kb", + "supported": true, + "des-short": "将聊天内容生成为词云", + "des": "拉取最新 300 条消息生成一张词云图片。\n\n命令:-groupword" } ] }