Closed kcn3388 closed 1 year ago
meme_optional
里面存放自定义表情,实际制作参考源仓库
大佬牛逼 另外能否为此插件的单独设置命令前缀? 此插件的命令格式极易与其他插件冲突。
大佬牛逼 另外能否为此插件的单独设置命令前缀? 此插件的命令格式极易与其他插件冲突。
@CCA2878
config.py
meme_command_start: str = "" # 命令前缀
感谢您的pr!目前在会战不好测试,会战结束后我看看
还有一个比较头疼的点,通过pip安装源仓库的话有个更新慢和不方便的问题,考虑直接将整个仓库移植过来ing
回头开个new branch吧
想了一下,作以下注释:
service.on_prefix
,减少误判的同时减轻对信息处理的难度新增更新头像表情包
,拉取表情包资源更新
最后一个,我之前就想解决那个前缀匹配删除会影响ev里的内容(可能会影响到其他插件的触发),但改成deepcopy
貌似还会有这个问题。
e2c4670这里把List
删了会报错诶,第26行用到了List
@Lanly109 按道理是不会的,我之前也是察觉到python这边变量直接赋值给另一个变量的话,两个变量是在同一个内存地址上的(也就是两个变量本质上是同一个),调用deepcopy的话理论上就是两个不相关的变量了。这边测试过修改以后就不会对原来的event进行操作了。或者我直接干脆点,对整个event做copy操作试试
最后一个,我之前就想解决那个前缀匹配删除会影响ev里的内容(可能会影响到其他插件的触发),但改成
deepcopy
貌似还会有这个问题。e2c4670这里把
List
删了会报错诶,第26行用到了List
这里可能需要你debug一下,看看是在哪里开始event被修改了。我这边姑且直接deepcopy整个event,你也可以看看新的commit有没有问题。
顺带我把原仓库提供的一些optional meme也加进来
hoshino的触发机制挺奇怪的,子目录下必须得有init.py才能被识别到,所以也没办法把optional meme作为一个submodule加入到仓库里,回头我试试能不能也更聪明的办法
如果在git clone
时没有抓取子模块:
git submodule init
git submodule update
如果想在git clone
时抓取子模块:
git clone --recursive
直接copy event有点问题,还是需要你debug一下定位在哪里开始ev内容被修改了
插件加载机制用的是nonebot
的,加载会判断目录是不是一个python3
的package
(有__init__.py
就是),不是的话就不加载了。
关于meme_3rd_optional,我这里貌似出现了点问题
我这边没问题,你截图一下完整的log?
或者你执行一下
git submodule init
git submodule update
2023-05-15 15:47:24.145 | ERROR | meme_generator.manager:load_memes:54 - Failed to import ~/HoshinoBot/hoshino/modules/headimg_generator/meme_optional/meme_3rd_optional/__init__.py!
Traceback (most recent call last):
File "~/HoshinoBot/run.py", line 4, in <module>
bot = hoshino.init()
│ └ <function init at 0x7ff29a4f8c10>
└ <module 'hoshino' from '~/HoshinoBot/hoshino/__init__.py'>
File "~/HoshinoBot/hoshino/__init__.py", line 67, in init
nonebot.load_plugins(
│ └ <function load_plugins at 0x7ff292658a60>
└ <module 'nonebot' from '/usr/local/lib/python3.8/site-packages/nonebot/__init__.py'>
File "/usr/local/lib/python3.8/site-packages/nonebot/plugin.py", line 323, in load_plugins
result = load_plugin(f'{module_prefix}.{m.group(1)}')
└ <function load_plugin at 0x7ff292642dc0>
File "/usr/local/lib/python3.8/site-packages/nonebot/plugin.py", line 249, in load_plugin
module = importlib.import_module(module_path)
│ │ └ 'hoshino.modules.headimg_generator.manager'
│ └ <function import_module at 0x7ff2a1e1d820>
└ <module 'importlib' from '/usr/local/lib/python3.8/importlib/__init__.py'>
File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
│ │ │ │ │ └ 0
│ │ │ │ └ None
│ │ │ └ 0
│ │ └ 'hoshino.modules.headimg_generator.manager'
│ └ <function _gcd_import at 0x7ff2a1f4d430>
└ <module 'importlib._bootstrap' (frozen)>
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "~/HoshinoBot/hoshino/modules/headimg_generator/__init__.py", line 17, in <module>
from meme_generator.download import check_resources
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "~/.local/lib/python3.8/site-packages/meme_generator/__init__.py", line 21, in <module>
load_memes(meme_dir)
│ └ PosixPath('~/HoshinoBot/hoshino/modules/headimg_generator/meme_optional')
└ <function load_memes at 0x7ff2763f58b0>
> File "~/.local/lib/python3.8/site-packages/meme_generator/manager.py", line 52, in load_memes
module_loader.exec_module(module)
│ │ └ <module 'meme_3rd_optional' from '~/HoshinoBot/hoshino/modules/headimg_generator/meme_optional/meme_3rd_optio...
│ └ <function _LoaderBasics.exec_module at 0x7ff2a1eee5e0>
└ <_frozen_importlib_external.SourceFileLoader object at 0x7ff2772e9eb0>
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "~/HoshinoBot/hoshino/modules/headimg_generator/meme_optional/meme_3rd_optional/__init__.py", line 1, in <module>
from .memes import *
ModuleNotFoundError: No module named 'meme_3rd_optional'
2023-05-15 15:47:24.610 | WARNING | meme_generator.manager:add_meme:73 - Meme with key "cuidao" already exists!
2023-05-15 15:47:24.613 | WARNING | meme_generator.manager:add_meme:73 - Meme with key "operations" already exists!
meme_optional
下的目录
.
├── __init__.py
├── cuidao
│ └── __init__.py
├── meme_3rd_optional
│ ├── LICENSE
│ ├── README.md
│ ├── __init__.py
│ ├── docs
│ │ ├── images
│ │ ├── memes.md
│ │ └── update_doc.py
│ ├── memes
│ │ ├── __init__.py
│ │ ├── can_can_need
│ │ ├── do
│ │ ├── empathy
│ │ ├── fleshlight
│ │ ├── forbid
│ │ ├── grab
│ │ ├── operator_generator
│ │ └── stretch
│ └── pyproject.toml
└── operations
└── __init__.py
@Lanly109
你fetch一下新的commit,我对这个是做了保护的,避免没有更新子模块的时候发生ModuleNotFoundError
meme_optional/__init.py, line 5-6
if os.path.exists(os.path.join(os.path.dirname(__file__), "meme_3rd_optional")):
from .meme_3rd_optional import *
理论上没有检测到这个git的子模块的话是不会import的
你试试在git clone
以后执行下面两个:
git submodule init
git submodule update
如果还是报错的话,上面的__init__.py
的那两行代码改成这样:
try:
from .meme_3rd_optional import *
except ModuleNotFoundError:
pass
或者直接改成这样:
if os.path.exists(os.path.join(os.path.dirname(__file__), "meme_3rd_optional")):
try:
from .meme_3rd_optional import *
except ModuleNotFoundError:
pass
请反馈一下两份代码哪份可行,谢谢~
你fetch一下新的commit,我对这个是做了保护的,避免没有更新子模块的时候发生ModuleNotFoundError meme_optional/__init.py, line 5-6
但问题是你看我上面的meme_optional
的目录下,meme_3rd_optional
里是有内容的,我是在本地执行过
git submodule init
git submodule update
然后把所有文件拷贝到服务器上。
上述的两份代码我都试了下,报错信息都是一样的。
看报错信息感觉是meme
的逻辑与所想的有些出入。
以下是我的插件的版本。
meme-generator 0.0.11
nonebot-plugin-memes 0.4.6
你fetch一下新的commit,我对这个是做了保护的,避免没有更新子模块的时候发生ModuleNotFoundError meme_optional/__init.py, line 5-6
但问题是你看我上面的
meme_optional
的目录下,meme_3rd_optional
里是有内容的,我是在本地执行过git submodule init git submodule update
然后把所有文件拷贝到服务器上。
上述的两份代码我都试了下,报错信息都是一样的。
看报错信息感觉是
meme
的逻辑与所想的有些出入。以下是我的插件的版本。
meme-generator 0.0.11 nonebot-plugin-memes 0.4.6
很神必,我这边双平台都没有报错 直接删除子模块吧,有需要再自行添加 而且看了一下这个库,有些表情挺吓人的()
还有一种可能是Python版本的问题,新版本的Python弃用了很多旧版本的兼容性特性,我机器人这边用的venv是跟随hoshino要求用的3.8
我的Python是3.8.6的,感觉是meme版本的问题。 不过目前也没什么问题,感谢您的pr!
33