A-kirami/nonebot-plugin-aidraw

[BUG]: 无法出图,报错drawcount

WindraiteLesd opened this issue · 16 comments

报告清单

  • 我已仔细阅读并了解上述注意事项。
  • 我已使用最新版本测试过,确定问题依旧存在。
  • 我确定在 GitHub Issues 中没有相同或相似的问题。
  • 我愿意帮助修复此问题。(这会将您指定为此问题的受理人并自动创建修复分支)

影响版本

问题插件版本:0.6.x
系统环境:Windows server 2019 datacenter
Python 3.9.13
nonebot2.0.0beta5/rc1

问题描述

一直在用0.5.0的版本来着,但功能不够完整,所以升到了0.6.x版本,之前无法正常使用我原认为是nonebot2.0.0beta5的问题,最近取舍掉一些插件升级到了rc1,插件版本0.6.3仍旧无法正常出图
Python换成3.8和3.10会崩其它插件,一直都是管理员运行模式
不知道为什么no such table:drawcount这个问题一直没能正常修复,之前就有提过

重现步骤

/画画 1girl
/个人标签排行

预期行为

bot正常出图
bot回复标签排行

实际行为

bot回复正在努力绘图中.....然后后台报错,无任何回复
标签排行无任何回复

日志信息

10-27 00:06:44 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_aidraw.draw) failed.
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\backends\sqlite\client.py", line 34, in translate_exceptions_
return await func(self, query, *args)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\backends\sqlite\client.py", line 141, in execute_query
rows = await connection.execute_fetchall(query, values)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\aiosqlite\core.py", line 203, in execute_fetchall
return await self._execute(self._execute_fetchall, sql, parameters)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\aiosqlite\core.py", line 129, in _execute
return await future
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\aiosqlite\core.py", line 102, in run
result = function()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\aiosqlite\core.py", line 81, in _execute_fetchall
cursor = self._conn.execute(sql, parameters)
sqlite3.OperationalError: no such table: drawcount

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\runpy.py", line 87, in run_code
exec(code, run_globals)
File "C:\ProgramData\Anaconda3\envs\lesd2\Scripts\nb.exe_main
.py", line 7, in
sys.exit(main())
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 1130, in call
return self.main(*args, **kwargs)
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 1055, in main
rv = self.invoke(ctx)
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 760, in invoke
return _callback(*args, **kwargs)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nb_cli\commands\main.py", line 30, in run
run_bot(file, app)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nb_cli\handlers\deploy.py", line 25, in run_bot
nonebot.run(app=f"{module_name}:{app}")
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot_init
.py", line 273, in run
get_driver().run(*args, **kwargs)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot\drivers\fastapi.py", line 172, in run
uvicorn.run(
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\uvicorn\main.py", line 576, in run
server.run()
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\uvicorn\server.py", line 60, in run
return asyncio.run(self.serve(sockets=sockets))
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 634, in run_until_complete
self.run_forever()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\windows_events.py", line 321, in run_forever
super().run_forever()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 601, in run_forever
self._run_once()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 1905, in _run_once
handle._run()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\events.py", line 80, in _run
self._context.run(self._callback, *self._args)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot\message.py", line 142, in _check_matcher
await _run_matcher(Matcher, bot, event, state, stack, dependency_cache)

File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot\message.py", line 186, in run_matcher
await matcher.run(bot, event, state, stack, dependency_cache)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot\internal\matcher.py", line 716, in run
await self.simple_run(bot, event, state, stack, dependency_cache)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot\internal\matcher.py", line 688, in simple_run
await handler(
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot\dependencies_init
.py", line 108, in call
return await cast(Callable[..., Awaitable[R]], self.call)(**values)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot_plugin_aidraw\draw.py", line 62, in count_tags
await DrawCount.count_tags(
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot_plugin_aidraw\database.py", line 61, in count_tags
counter, _ = await cls.get_or_create(uid=uid, gid=gid)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 1059, in get_or_create
await cls.select_for_update().filter(**kwargs).using_db(connection).get(),
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\queryset.py", line 1006, in _execute
instance_list = await self._db.executor_class(
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\backends\base\executor.py", line 130, in execute_select
, raw_results = await self.db.execute_query(query.get_sql())
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\backends\sqlite\client.py", line 36, in translate_exceptions

raise OperationalError(exc)
tortoise.exceptions.OperationalError: no such table: drawcount

额外补充

尝试更换python 3.8或者3.10 版本看看能否解决

尝试更换python 3.8或者3.10 版本看看能否解决

py3.8和3.10无法加载插件

尝试更换python 3.8或者3.10 版本看看能否解决

py3.8和3.10无法加载插件

检查一下插件目录中是否正常创建数据库文件

尝试更换python 3.8或者3.10 版本看看能否解决

py3.8和3.10无法加载插件

检查一下插件目录中是否正常创建数据库文件

IMG_20221103_171131

尝试更换python 3.8或者3.10 版本看看能否解决

py3.8和3.10无法加载插件

检查一下插件目录中是否正常创建数据库文件

IMG_20221103_171131

打开数据库查看一下是否有创建表

尝试更换python 3.8或者3.10 版本看看能否解决

py3.8和3.10无法加载插件

检查一下插件目录中是否正常创建数据库文件

IMG_20221103_171131

打开数据库查看一下是否有创建表

IMG_20221103_182757

运行以下代码并提供输出结果

import sqlite3
print("sqlite3版本:", sqlite3.version_info)
print("SQLite版本", sqlite3.sqlite_version)

运行以下代码并提供输出结果

import sqlite3
print("sqlite3版本:", sqlite3.version_info)
print("SQLite版本", sqlite3.sqlite_version)

sqlite3版本(2,6,0)
SQLite版本(3.39.3)

使用最新提交3f396e4测试是否可以正常使用

使用最新提交3f396e4测试是否可以正常使用

11-03 19:51:03 [ERROR] uvicorn | Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 113, in get
return storage[conn_alias]
KeyError: 'aidraw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 76, in _get_db_info
return self.db_config[conn_alias]
KeyError: 'aidraw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 635, in lifespan
async with self.lifespan_context(app):
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 530, in aenter
await self.router.startup()
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 612, in startup await handler()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\haruka_bot\database\db.py", line 27, in init
await Tortoise.init(
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 574, in init
cls.init_apps(apps_config)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 417, in _init_apps
cls.build_initial_querysets()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 440, in _build_initial_querysets
model._meta.finalise_model()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 308, in finalise_model
self._generate_filters()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 476, in _generate_filters
get_overridden_filter_func = self.db.executor_class.get_overridden_filter_func
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 288, in db
return connections.get(self.default_connection)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 115, in get
connection: BaseDBAsyncClient = self._create_connection(conn_alias)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 90, in _create_connection
db_info = self._get_db_info(conn_alias)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 78, in _get_db_info
raise ConfigurationError(
tortoise.exceptions.ConfigurationError: Unable to get db settings for alias 'aidraw'. Please check if the config dict contains this alias and try again

11-03 19:51:03 [ERROR] uvicorn | Application startup failed. Exiting.
11-03 19:51:03 [ERROR] apscheduler | Job "dy_sched (trigger: date[2022-11-03 19:51:02 CST], next run at: 2022-11-03 19:51:02 CST)" raised an exception
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\runpy.py", line 87, in run_code
exec(code, run_globals)
File "C:\ProgramData\Anaconda3\envs\lesd2\Scripts\nb.exe_main
.py", line 7, in
sys.exit(main())
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 1130, in call
return self.main(*args, **kwargs)
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 1055, in main
rv = self.invoke(ctx)
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\click\core.py", line 760, in invoke
return _callback(*args, **kwargs)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nb_cli\commands\main.py", line 30, in run
run_bot(file, app)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nb_cli\handlers\deploy.py", line 25, in run_bot
nonebot.run(app=f"{module_name}:{app}")
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot_init
.py", line 273, in run
get_driver().run(*args, **kwargs)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot\drivers\fastapi.py", line 172, in run
uvicorn.run(
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\uvicorn\main.py", line 576, in run
server.run()
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\uvicorn\server.py", line 60, in run
return asyncio.run(self.serve(sockets=sockets))
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\runners.py", line 47, in run
_cancel_all_tasks(loop)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\runners.py", line 63, in _cancel_all_tasks
loop.run_until_complete(
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 634, in run_until_complete
self.run_forever()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\windows_events.py", line 321, in run_forever
super().run_forever()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 601, in run_forever
self._run_once()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 1905, in _run_once
handle._run()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\events.py", line 80, in _run
self._context.run(self._callback, *self._args)

File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\apscheduler\executors\base_py3.py", line 30, in run_coroutine_job
retval = await job.func(*job.args, **job.kwargs)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\haruka_bot\plugins\pusher\dynamic_pusher.py", line 24, in dy_sched
await asyncio.sleep(1)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\tasks.py", line 652, in sleep
return await future
asyncio.exceptions.CancelledError

image
使用的 haruka_bot 运行本插件?

image 使用的 haruka_bot 运行本插件?

haruka_bot作为插件运行的

image 使用的 haruka_bot 运行本插件?

作为插件运行的

由于 HarukaBot 也使用了 tortoise-orm,导致后加载的 aidraw 无法初始化自身的数据库配置,所以出现此错误,你可以在 HarukaBot 中修改它的数据库初始化部分,将 aidraw 的数据库添加到此部分
HarukaBot 数据库初始化部分见此处

感谢,已解决

image 使用的 haruka_bot 运行本插件?

作为插件运行的

由于 HarukaBot 也使用了 tortoise-orm,导致后加载的 aidraw 无法初始化自身的数据库配置,所以出现此错误,你可以在 HarukaBot 中修改它的数据库初始化部分,将 aidraw 的数据库添加到此部分 HarukaBot 数据库初始化部分见此处

[ERROR] uvicorn | Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 113, in get
return storage[conn_alias]
KeyError: 'aidraw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 76, in _get_db_info
return self.db_config[conn_alias]
KeyError: 'aidraw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 635, in lifespan
async with self.lifespan_context(app):
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 530, in aenter
await self.router.startup()
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 612, in startup
await handler()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\haruka_bot\database\db.py", line 27, in init
await Tortoise.init(
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 574, in init
cls.init_apps(apps_config)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 417, in _init_apps
cls.build_initial_querysets()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 440, in _build_initial_querysets
model._meta.finalise_model()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 308, in finalise_model
self._generate_filters()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 476, in _generate_filters
get_overridden_filter_func = self.db.executor_class.get_overridden_filter_func
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 288, in db
return connections.get(self.default_connection)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 115, in get
connection: BaseDBAsyncClient = self._create_connection(conn_alias)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 90, in _create_connection
db_info = self._get_db_info(conn_alias)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 78, in _get_db_info
raise ConfigurationError(
tortoise.exceptions.ConfigurationError: Unable to get db settings for alias 'aidraw'. Please check if the config dict contains this alias and try again

之前没试,现在配置了一下发现不能读取数据库文件,是我配置的问题吗?
db_url=f"sqlite://{get_path('data.sqlite3','aidraw.sqlite')}",
插件的数据库文件路径设置在了与harukabot数据库文件同一目录下,aidraw.sqlite也正常生成了

image 使用的 haruka_bot 运行本插件?

作为插件运行的

由于 HarukaBot 也使用了 tortoise-orm,导致后加载的 aidraw 无法初始化自身的数据库配置,所以出现此错误,你可以在 HarukaBot 中修改它的数据库初始化部分,将 aidraw 的数据库添加到此部分 HarukaBot 数据库初始化部分见此处

[ERROR] uvicorn | Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 113, in get
return storage[conn_alias]
KeyError: 'aidraw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 76, in _get_db_info
return self.db_config[conn_alias]
KeyError: 'aidraw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 635, in lifespan
async with self.lifespan_context(app):
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 530, in aenter
await self.router.startup()
File "C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages\starlette\routing.py", line 612, in startup
await handler()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\haruka_bot\database\db.py", line 27, in init
await Tortoise.init(
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 574, in init
cls.init_apps(apps_config)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 417, in _init_apps
cls.build_initial_querysets()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise_init
.py", line 440, in _build_initial_querysets
model._meta.finalise_model()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 308, in finalise_model
self._generate_filters()
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 476, in _generate_filters
get_overridden_filter_func = self.db.executor_class.get_overridden_filter_func
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\models.py", line 288, in db
return connections.get(self.default_connection)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 115, in get
connection: BaseDBAsyncClient = self._create_connection(conn_alias)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 90, in _create_connection
db_info = self._get_db_info(conn_alias)
File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\tortoise\connection.py", line 78, in _get_db_info
raise ConfigurationError(
tortoise.exceptions.ConfigurationError: Unable to get db settings for alias 'aidraw'. Please check if the config dict contains this alias and try again

之前没试,现在配置了一下发现不能读取数据库文件,是我配置的问题吗?
db_url=f"sqlite://{get_path('data.sqlite3','aidraw.sqlite')}",
插件的数据库文件路径设置在了与harukabot数据库文件同一目录下,aidraw.sqlite也正常生成了

你这样写等于只创建aidraw的数据库,但是没有添加aidraw的模型,也就是没有建表。你不应该修改url部分,而是应该将aidraw的model添加进Haruka的数据库初始化配置中,或者参考aidraw改写为配置字典,再将两个配置字典合并。