SAGIRI-kawaii / sagiri-bot

基于Graia Ariadne和Mirai的QQ机器人 SAGIRI-BOT
GNU Affero General Public License v3.0
696 stars 83 forks source link

[Bug Report]Mysql 群名存在emoji的时候数据库插入失败,导致无法启动 #247

Closed rabbit-dayi closed 2 years ago

rabbit-dayi commented 2 years ago

问题 群名存在emoji时,出现数据库不能载入

如何复现 群名存在emoji

预期行为 也许可以对群名进行二次编码?

使用环境:

关键错误日志

pymysql.err.DataError: (1366, "Incorrect string value: '\\xF0\\x9F\\x91\\x91' for column 'group_name' at row 1")

...

sqlalchemy.exc.DataError: (pymysql.err.DataError) (1366, "Incorrect string value: '\\xF0\\x9F\\x91\\x91' for column 'group_name' at row 1")
[SQL: INSERT INTO setting (group_id, group_name, `repeat`, frequency_limit, setu, `real`, real_high_quality, bizhi, r18, img_search, bangumi_search, compile, dice, avatar_func, anti_revoke, anti_flash_image, online_notice, daily_newspaper, setting, debug, switch, active, music, r18_process, speak_mode, long_text_type, voice) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
[parameters: (7872*****, '乱俱乐部👑', 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '{}', 0, 1, 1, 'off', 'revoke', 'normal', 'text', 'off')]
(Background on this error at: https://sqlalche.me/e/14/9h9h)

日志/截图 将任何有关的日志/截图放到这里(控制台输出/MAH 输出/...)

2022-05-20 20:24:49.603 | SUCCESS  | sagiri_bot.core.app_core:config_check:225 - web_manager_api - True
2022-05-20 20:24:49.603 | SUCCESS  | sagiri_bot.core.app_core:config_check:225 - web_manager_auto_boot - True
2022-05-20 20:24:49.603 | INFO     | sagiri_bot.core.app_core:config_check:226 - Configuration check completed
[]
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
  Generating /root/sagiri/sagiri-bot/alembic/versions/474713359c1e_update.py ...  done
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade 71044562231f -> 474713359c1e, update
2022-05-20 20:24:50.617 | ERROR    | sagiri_bot.handler.handlers.pica.Pica:check:75 - pica 账号密码可能错误,请检查
2022-05-20 20:24:51.005 | ERROR    | sagiri_bot.core.app_core:bot_launch_init:194 - Traceback (most recent call last):
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
    cursor.execute(statement, parameters)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 97, in execute
    return self.await_(self._execute_async(operation, parameters))
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 76, in await_only
    return current.driver.switch(awaitable)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 129, in greenlet_spawn
    value = await result
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 109, in _execute_async
    result = await self._cursor.execute(operation, parameters)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/cursors.py", line 239, in execute
    await self._query(query)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/cursors.py", line 457, in _query
    await conn.query(q)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 469, in query
    await self._read_query_result(unbuffered=unbuffered)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 672, in _read_query_result
    await result.read()
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 1153, in read
    first_packet = await self.connection._read_packet()
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 641, in _read_packet
    packet.raise_for_error()
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/protocol.py", line 221, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.DataError: (1366, "Incorrect string value: '\\xF0\\x9F\\x91\\x91' for column 'group_name' at row 1")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/root/sagiri/sagiri-bot/sagiri_bot/core/app_core.py", line 168, in bot_launch_init
    await orm.insert_or_update(
  File "/root/sagiri/sagiri-bot/sagiri_bot/orm/async_orm.py", line 130, in insert_or_update
    return await self.execute(insert(table).values(**dt))
  File "/root/sagiri/sagiri-bot/sagiri_bot/orm/async_orm.py", line 57, in execute
    raise e
  File "/root/sagiri/sagiri-bot/sagiri_bot/orm/async_orm.py", line 51, in execute
    result = await session.execute(sql, **kwargs)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/ext/asyncio/session.py", line 211, in execute
    return await greenlet_spawn(
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 134, in greenlet_spawn
    result = context.throw(*sys.exc_info())
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1692, in execute
    result = conn._execute_20(statement, params or {}, execution_options)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1614, in _execute_20
    return meth(self, args_10style, kwargs_10style, execution_options)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in _execute_clauseelement
    ret = self._execute_context(
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context
    self._handle_dbapi_exception(
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2026, in _handle_dbapi_exception
    util.raise_(
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
    cursor.execute(statement, parameters)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 97, in execute
    return self.await_(self._execute_async(operation, parameters))
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 76, in await_only
    return current.driver.switch(awaitable)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 129, in greenlet_spawn
    value = await result
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 109, in _execute_async
    result = await self._cursor.execute(operation, parameters)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/cursors.py", line 239, in execute
    await self._query(query)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/cursors.py", line 457, in _query
    await conn.query(q)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 469, in query
    await self._read_query_result(unbuffered=unbuffered)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 672, in _read_query_result
    await result.read()
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 1153, in read
    first_packet = await self.connection._read_packet()
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 641, in _read_packet
    packet.raise_for_error()
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/protocol.py", line 221, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
    raise errorclass(errno, errval)
sqlalchemy.exc.DataError: (pymysql.err.DataError) (1366, "Incorrect string value: '\\xF0\\x9F\\x91\\x91' for column 'group_name' at row 1")
[SQL: INSERT INTO setting (group_id, group_name, `repeat`, frequency_limit, setu, `real`, real_high_quality, bizhi, r18, img_search, bangumi_search, compile, dice, avatar_func, anti_revoke, anti_flash_image, online_notice, daily_newspaper, setting, debug, switch, active, music, r18_process, speak_mode, long_text_type, voice) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
[parameters: (7872*****, '乱俱乐部👑', 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '{}', 0, 1, 1, 'off', 'revoke', 'normal', 'text', 'off')]
(Background on this error at: https://sqlalche.me/e/14/9h9h)
nullqwertyuiop commented 2 years ago

See #40 #47

nullqwertyuiop commented 2 years ago

尝试将已建立的数据库 charset 更改为 utf8mb4,并将数据库链接改为 mysql+aiomysql://sagiri_bot:zJ24kihjX@10.x.x.2:3306/sagiri_bot?charset=utf8mb4

rabbit-dayi commented 2 years ago

感谢回复。 经过测试,可以在utf8mb4字符集下,排序规则为utf8mb4_unicode_ci,使用mysql+aiomysql://sagiri_bot:zJ24kihjX@10.x.x.2:3306/sagiri_bot?charset=utf8mb4,修改排序规则后,将整个数据表删除之后,可以正常使用。

同时另外一个小问题:

sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'sagiri_bot_1.keyword_reply' doesn't exist") [SQL: SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.group FROM keyword_reply WHERE keyword_reply.reply_type IN (%s, %s)] [parameters: ('regex', 'fuzzy')] (Background on this error at: https://sqlalche.me/e/14/f405)


- 全部日志 :
```sh
  File "/root/sagiri/sagiri-bot/sagiri_bot/orm/async_orm.py", line 51, in execute
    result = await session.execute(sql, **kwargs)
                   │       │       │      └ {}
                   │       │       └ <sqlalchemy.sql.selectable.Select object at 0x7f1dd5d9c280>
                   │       └ <function AsyncSession.execute at 0x7f1e0f3a0790>
                   └ <sqlalchemy.ext.asyncio.session.AsyncSession object at 0x7f1dd5d7abe0>

  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/ext/asyncio/session.py", line 211, in execute
    return await greenlet_spawn(
                 └ <function greenlet_spawn at 0x7f1e12225430>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 134, in greenlet_spawn
    result = context.throw(*sys.exc_info())
             │       │      │   └ <built-in function exc_info>
             │       │      └ <module 'sys' (built-in)>
             │       └ <method 'throw' of 'greenlet.greenlet' objects>
             └ <_AsyncIoGreenlet object at 0x7f1dd5da1040 (otid=0x7f1e12c14e40) dead>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1692, in execute
    result = conn._execute_20(statement, params or {}, execution_options)
             │    │           │          │             └ immutabledict({'prebuffer_rows': True, '_result_disable_adapt_to_context': True, 'future_result': True})
             │    │           │          └ None
             │    │           └ <sqlalchemy.sql.selectable.Select object at 0x7f1dd5d9c280>
             │    └ <function Connection._execute_20 at 0x7f1e0f972e50>
             └ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1614, in _execute_20
    return meth(self, args_10style, kwargs_10style, execution_options)
           │    │     │             │               └ immutabledict({'prebuffer_rows': True, '_result_disable_adapt_to_context': True, 'future_result': True})
           │    │     │             └ immutabledict({})
           │    │     └ ({},)
           │    └ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
           └ <bound method ClauseElement._execute_on_connection of <sqlalchemy.sql.selectable.Select object at 0x7f1dd5d9c280>>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
    return connection._execute_clauseelement(
           │          └ <function Connection._execute_clauseelement at 0x7f1e0f972ca0>
           └ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in _execute_clauseelement
    ret = self._execute_context(
          │    └ <function Connection._execute_context at 0x7f1e0f972f70>
          └ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context
    self._handle_dbapi_exception(
    │    └ <function Connection._handle_dbapi_exception at 0x7f1e0f977160>
    └ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2026, in _handle_dbapi_exception
    util.raise_(
    │    └ <function raise_ at 0x7f1e1225c790>
    └ <module 'sqlalchemy.util' from '/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/__init__.py'>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
    │    │       └ <function DefaultDialect.do_execute at 0x7f1e0f6b2040>
    │    └ <sqlalchemy.dialects.mysql.aiomysql.MySQLDialect_aiomysql object at 0x7f1e0f2d0be0>
    └ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
    cursor.execute(statement, parameters)
    │      │       │          └ ('regex', 'fuzzy')
    │      │       └ 'SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
    │      └ <function AsyncAdapt_aiomysql_cursor.execute at 0x7f1e0f2c9c10>
    └ <sqlalchemy.dialects.mysql.aiomysql.AsyncAdapt_aiomysql_cursor object at 0x7f1e0f1cd770>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 97, in execute
    return self.await_(self._execute_async(operation, parameters))
           │    │      │    │              │          └ ('regex', 'fuzzy')
           │    │      │    │              └ 'SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
           │    │      │    └ <function AsyncAdapt_aiomysql_cursor._execute_async at 0x7f1e0f2c9d30>
           │    │      └ <sqlalchemy.dialects.mysql.aiomysql.AsyncAdapt_aiomysql_cursor object at 0x7f1e0f1cd770>
           │    └ <member 'await_' of 'AsyncAdapt_aiomysql_cursor' objects>
           └ <sqlalchemy.dialects.mysql.aiomysql.AsyncAdapt_aiomysql_cursor object at 0x7f1e0f1cd770>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 76, in await_only
    return current.driver.switch(awaitable)
           │                     └ <coroutine object AsyncAdapt_aiomysql_cursor._execute_async at 0x7f1e07b4bc40>
           └ <_AsyncIoGreenlet object at 0x7f1dd5da1040 (otid=0x7f1e12c14e40) dead>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 129, in greenlet_spawn
    value = await result
                  └ <coroutine object AsyncAdapt_aiomysql_cursor._execute_async at 0x7f1e07b4bc40>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 109, in _execute_async
    result = await self._cursor.execute(operation, parameters)
                   │    │               │          └ ('regex', 'fuzzy')
                   │    │               └ 'SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
                   │    └ <member '_cursor' of 'AsyncAdapt_aiomysql_cursor' objects>
                   └ <sqlalchemy.dialects.mysql.aiomysql.AsyncAdapt_aiomysql_cursor object at 0x7f1e0f1cd770>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/cursors.py", line 239, in execute
    await self._query(query)
          │    │      └ "SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
          │    └ <function Cursor._query at 0x7f1e0f241940>
          └ <aiomysql.cursors.Cursor object at 0x7f1dd5d7a970>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/cursors.py", line 457, in _query
    await conn.query(q)
          │    │     └ "SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
          │    └ <function Connection.query at 0x7f1e0f249790>
          └ <aiomysql.connection.Connection object at 0x7f1dd5d9c8b0>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 469, in query
    await self._read_query_result(unbuffered=unbuffered)
          │    │                             └ False
          │    └ <function Connection._read_query_result at 0x7f1e0f249ee0>
          └ <aiomysql.connection.Connection object at 0x7f1dd5d9c8b0>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 672, in _read_query_result
    await result.read()
          │      └ <function MySQLResult.read at 0x7f1e0f24aaf0>
          └ <aiomysql.connection.MySQLResult object at 0x7f1dd5d9c220>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 1153, in read
    first_packet = await self.connection._read_packet()
                         │    └ None
                         └ <aiomysql.connection.MySQLResult object at 0x7f1dd5d9c220>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 641, in _read_packet
    packet.raise_for_error()
    │      └ <function MysqlPacket.raise_for_error at 0x7f1e0f2b1040>
    └ <pymysql.protocol.MysqlPacket object at 0x7f1dd5d45a90>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/protocol.py", line 221, in raise_for_error
    err.raise_mysql_exception(self._data)
    │   │                     │    └ <member '_data' of 'MysqlPacket' objects>
    │   │                     └ <pymysql.protocol.MysqlPacket object at 0x7f1dd5d45a90>
    │   └ <function raise_mysql_exception at 0x7f1e0f2dc9d0>
    └ <module 'pymysql.err' from '/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/err.py'>
  File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
    raise errorclass(errno, errval)
          │          │      └ "Table 'sagiri_bot_1.keyword_reply' doesn't exist"
          │          └ 1146
          └ <class 'pymysql.err.ProgrammingError'>

sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'sagiri_bot_1.keyword_reply' doesn't exist")
[SQL: SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group`
FROM keyword_reply
WHERE keyword_reply.reply_type IN (%s, %s)]
[parameters: ('regex', 'fuzzy')]
(Background on this error at: https://sqlalche.me/e/14/f405)
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
nullqwertyuiop commented 2 years ago

推测是因为 Saya 加载了 KeywordRespondent 插件时数据库仍未完成初始化,完成数据库初始化后重启即可

以下是对出错原因的分析 https://github.com/SAGIRI-kawaii/sagiri-bot/blob/a22828e74aa247556bc036ffedceb74521dd5e39/sagiri_bot/handler/handlers/keyword_respondent.py#L282-L290

https://github.com/SAGIRI-kawaii/sagiri-bot/blob/a22828e74aa247556bc036ffedceb74521dd5e39/main.py#L81-L83

可见,以上两处监听的为同一事件 ApplicationLaunched,且为同时执行,故会在首次使用时造成本次错误

rabbit-dayi commented 2 years ago

感谢回复