From 043efd162c45be201e605f890ee55dbffeac2dd8 Mon Sep 17 00:00:00 2001 From: SlyAimer <2289782085@qq.com> Date: Sun, 9 Feb 2025 16:11:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(plugins):=20=E6=96=B0=E5=A2=9E=E9=B2=81?= =?UTF-8?q?=E8=BF=85=E8=AF=B4=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 `who_say.py` 插件,支持生成鲁迅说图片 - 优化 `get_image.py` 中的 `add_text_to_image` 方法,支持自定义文本位置 - 在 `path_config.py` 中新增 `who_say_path` 配置 - 更新 `check.py` 菜单列表,添加鲁迅说相关命令 --- src/clover_image/get_image.py | 16 ++++-- src/configs/path_config.py | 3 ++ src/plugins/check.py | 3 +- src/plugins/good_bad_news.py | 16 +++--- src/plugins/test/test.py | 75 ++++++++++++++++++++++++++ src/plugins/who_say.py | 25 +++++++++ src/resources/image/who_say/luxun.jpg | Bin 0 -> 35366 bytes 7 files changed, 127 insertions(+), 11 deletions(-) create mode 100644 src/plugins/who_say.py create mode 100644 src/resources/image/who_say/luxun.jpg diff --git a/src/clover_image/get_image.py b/src/clover_image/get_image.py index 6285f9b..057fcfb 100644 --- a/src/clover_image/get_image.py +++ b/src/clover_image/get_image.py @@ -133,7 +133,7 @@ class rua(): """ 图文合成 """ -async def add_text_to_image(image_path, output_path,content,font_path, font_size, text_color, position): +async def add_text_to_image(image_path, output_path,content,font_path, font_size, text_color,text_position ,position): """ 给图片添加文字 :param image_path: 输入图片的路径 @@ -159,7 +159,7 @@ async def add_text_to_image(image_path, output_path,content,font_path, font_size # 获取字符的宽度 char_width, _ = draw.textbbox((0, 0), char, font=font)[2:] # 如果当前行的宽度加上字符宽度超过图片指定宽度,则换行 - if current_width + char_width > image.width // 2: # 这里是图片的一半 + if current_width + char_width > image.width * 9 // 10: # 这里是图片的十分之九 wrapped_text += "\n" current_width = 0 # 将字符添加到当前行 @@ -189,15 +189,23 @@ async def add_text_to_image(image_path, output_path,content,font_path, font_size position = (0, image.height - text_height) elif position == "bottom right corner": position = (image.width - text_width, image.height - text_height) + elif position == "bottom left corner 9/10": + position = (0, image.height * 9 // 10 - text_height) # 在图片上绘制文本 - draw.multiline_text(position, wrapped_text, font=font, fill=text_color, align="center") + draw.multiline_text(position, wrapped_text, font=font, fill=text_color, align=text_position) # 保存合成后的图片 image.save(output_path) # 关闭图片 # image.close() - +async def delete_file(file_path): + try: + os.remove(file_path) + except FileNotFoundError: + print(f"文件 {file_path} 不存在。") + except Exception as e: + print(f"删除文件时发生错误: {e}") if __name__ == '__main__': # print(get_smms_image_url()) diff --git a/src/configs/path_config.py b/src/configs/path_config.py index d0a4be5..62ef4ab 100644 --- a/src/configs/path_config.py +++ b/src/configs/path_config.py @@ -15,6 +15,9 @@ rua_png = path+'/image/rua/' # 喜报、悲报图片路径 good_bad = path+'/image/good_bad_news/' +#谁说 生成图片路径 +who_say_path = path+'/image/who_say/' + # 字体路径 font_path = path + '/font/' diff --git a/src/plugins/check.py b/src/plugins/check.py index 0fcbd2d..6d5de9e 100644 --- a/src/plugins/check.py +++ b/src/plugins/check.py @@ -15,7 +15,8 @@ import psutil import time menu = ['/今日运势','/今日塔罗','/图','/点歌','/摸摸头','/群老婆','/今日老婆', "/开启ai","/关闭ai","/角色列表","/添加人设", "/更新人设", "/删除人设", "/切换人设", "/管理员注册", - '/待办', '/test','/天气','我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办" ,"/cf","/B站搜索", "/BV搜索", "/喜报", "/悲报", "/奶龙", "/repo", "/info", "/menu"] + '/待办', '/test','/天气','我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办" ,"/cf","/B站搜索", "/BV搜索", "/喜报", "/悲报", "/luxun","/鲁迅说", + "/奶龙", "/repo", "/info", "/menu"] async def check_value_in_menu(message: MessageEvent) -> bool: diff --git a/src/plugins/good_bad_news.py b/src/plugins/good_bad_news.py index 509c646..e776381 100644 --- a/src/plugins/good_bad_news.py +++ b/src/plugins/good_bad_news.py @@ -6,7 +6,7 @@ import urllib.parse import requests import time import httpx -from src.clover_image.get_image import add_text_to_image +from src.clover_image.get_image import add_text_to_image,delete_file from src.configs.path_config import font_path,good_bad,temp_path # good_news = on_command("喜报", rule=to_me(), priority=10, block=True, aliases={"悲报"}) @@ -42,16 +42,20 @@ good_news = on_command("喜报", rule=to_me(), priority=10, block=True, aliases= @good_news.handle() async def function(message: MessageEvent): value = message.get_plaintext().split(" ") + filename = "" keyword,content = value[0], value[1] if len(value) < 2 or len(value) > 2: await good_news.finish("请输入 正确的格式哦~ /喜报+内容 或者 /悲报+内容") if keyword == "/喜报": - await add_text_to_image(image_path=good_bad + "good_news.png", output_path=temp_path+"good_news.png", content=content, + filename = "good_news.png" + await add_text_to_image(image_path=good_bad + filename, output_path=temp_path + filename, content=content, font_path=font_path + "msyh.ttc", font_size=64, text_color=(255, 0, 0), position="center") - await good_news.finish(MessageSegment.file_image(Path(temp_path+"good_news.png"))) + await good_news.finish(MessageSegment.file_image(Path(temp_path + filename))) elif keyword == "/悲报": - await add_text_to_image(image_path=good_bad + "bad_news.png", output_path=temp_path+"bad_news.png", content=content, - font_path=font_path + "msyh.ttc", font_size=64, text_color=(128, 128, 128), + filename = "bad_news.png" + await add_text_to_image(image_path=good_bad + filename, output_path=temp_path + filename, content=content, + font_path=font_path + "msyh.ttc", font_size=64, text_color=(128, 128, 128),text_position="center", position="center") - await good_news.finish(MessageSegment.file_image(Path(temp_path+"bad_news.png"))) \ No newline at end of file + await good_news.send(MessageSegment.file_image(Path(temp_path+filename))) + await delete_file(temp_path + filename) \ No newline at end of file diff --git a/src/plugins/test/test.py b/src/plugins/test/test.py index e69de29..46aa7ee 100644 --- a/src/plugins/test/test.py +++ b/src/plugins/test/test.py @@ -0,0 +1,75 @@ +import random + +# 中文数字映射 +chinese_numbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] + + +# 生成对称且带有一个不同字符的矩阵 +def generate_matrix(rows=9, cols=9): + base_char = '辏' + special_char = '鞅' + matrix = [[base_char] * cols for _ in range(rows)] + # 确保矩阵对称 + for i in range(rows): + for j in range(i, cols): + matrix[j][i] = matrix[i][j] + # 随机选择一个位置放置不同字符 + diff_row = random.randint(0, rows - 1) + diff_col = random.randint(0, cols - 1) + matrix[diff_row][diff_col] = special_char + # 保持对称 + matrix[diff_col][diff_row] = special_char + return matrix + + +# 打印矩阵,使用中文数字表示行号和列号 +def print_matrix(matrix): + col_num = len(matrix[0]) + # 打印列数头部 + col_header = " " + " ".join([chinese_numbers[i + 1] for i in range(col_num)]) + print(f"{chinese_numbers[0]} |{col_header}") + # 打印分隔线 + print(" " + "——" * (len(col_header))) + for i, row in enumerate(matrix, start=1): + row_str = " ".join(row) + print(f"{chinese_numbers[i]} | {row_str}") + + +# 主游戏函数 +def play_game(): + matrix = generate_matrix() + print("矩阵:") + print_matrix(matrix) + + while True: + try: + row_input = input("请输入不同字符所在的行(如 一),输入 '退出' 结束游戏: ") + if row_input == '退出': + print("游戏结束。") + break + col_input = input("请输入不同字符所在的列(如 一): ") + + row_answer = chinese_numbers.index(row_input) - 1 + col_answer = chinese_numbers.index(col_input) - 1 + + # 找出实际不同字符的位置 + for i in range(len(matrix)): + for j in range(len(matrix[0])): + if matrix[i][j] != '辏': + correct_row = i + correct_col = j + break + + if row_answer == correct_row and col_answer == correct_col: + print("恭喜你,回答正确!") + break + else: + print("回答错误,请再试一次。") + except ValueError: + print("输入无效,请输入正确的中文数字或 '退出'。") + + +if __name__ == "__main__": + play_game() + + diff --git a/src/plugins/who_say.py b/src/plugins/who_say.py new file mode 100644 index 0000000..3f48672 --- /dev/null +++ b/src/plugins/who_say.py @@ -0,0 +1,25 @@ +import random +from pathlib import Path +from nonebot.plugin import on_command +from nonebot.adapters.qq import MessageEvent, MessageSegment +from src.clover_image.get_image import add_text_to_image,delete_file +from src.configs.path_config import who_say_path,font_path,temp_path + + +luxun = on_command("luxun", aliases={"鲁迅说"}, rule=None) +@luxun.handle() +async def handle(message: MessageEvent): + + filename = str(message.get_user_id()) + str(random.randint(0, 10000)) + ".jpg" + value = message.get_plaintext().split(" ") + keyword, content = value[0], value[1] + if len(value) < 2 or len(value) > 2: + await luxun.finish("你让鲁迅说点啥?格式不对自己捋一捋吧~") + if len(content) >= 24: + await luxun.finish("太长了, 鲁迅说不完! 24字以内~") + else: + await add_text_to_image(image_path=who_say_path + "luxun.jpg", output_path=temp_path + filename, content=" "+content+" —鲁迅", + font_path=font_path + "华文行楷.TTF", font_size=28, text_color=(255, 255, 255),text_position="left", + position="bottom left corner 9/10") + await luxun.send(MessageSegment.file_image(Path(temp_path + filename))) + await delete_file(temp_path + filename) \ No newline at end of file diff --git a/src/resources/image/who_say/luxun.jpg b/src/resources/image/who_say/luxun.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b10eaf69da59e8cc969b0611eae35cfbb90b3ba GIT binary patch literal 35366 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 Y0$NXb2mLUvkg%Is7*%jj*S^xk5 literal 0 HcmV?d00001