Code Monkey home page Code Monkey logo

sagiri-bot's Introduction

logo

SAGIRI-BOT


一个基于 Mirai 和 Graia-Ariadne 的QQ机器人

SAGIRI之名取自动漫《埃罗芒阿老师》中的角色 和泉纱雾(Izumi Sagiri)

若您在使用过程中发现了bug或有一些建议,欢迎提出ISSUE、PR或加入 QQ交流群:788031679

来个star吧,球球惹!

项目特色

  • 基于Sqlalchemy的异步ORM
  • 权限管理系统
  • 频率限制模块
  • 丰富的功能
  • 可视化管理模块【TODO】
  • 基于loguru的日志系统
  • 基于alembic的数据库版本管理功能

项目部署

Windows部署文档

Linux部署文档

Docker部署文档

使用文档

使用文档(部分过时)

注意

  • 目前机器人尚未完善,仍有许多bug存在,若您在使用中发现了bug或有更好的建议,请提ISSUE

  • 目前仅对 sqlite 数据库进行了适配,使用 Mysql 以及 PostgreSQL 产生的bug可能会很多并且会导致程序无法运行,若您需要稳定的运行请使用sqlite

  • 支持的数据库类型请查看sqlalchemy文档

  • 若您有好的解决方法可以PR,但请保证sqlite的兼容性

鸣谢

Stargazers over time

Stargazers over time

sagiri-bot's People

Contributors

a-stupid-sun avatar i-love-study avatar minepig avatar nullqwertyuiop avatar oldking139 avatar rabbit-dayi avatar sagiri-kawaii avatar timerainstarsky avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sagiri-bot's Issues

[Bug]初始化时未读取配置文件

sagiri-bot的第53行开始:

app = GraiaMiraiApplication(
    broadcast=bcc,
    connect_info=Session(
        host="http://localhost:8080",
        authKey="1234567890",
        account=configs["BotQQ"],
        websocket=True
    )
)

其中hostauthKey使用默认值,理论上应该从配置文件读取(也有可能后面的代码处理了,我只是跑的时候出错来,推测是这里的问题)

模糊匹配关键词进行回复

机器人可对设定好的关键词进行回复,但是目前仅局限于与设定关键词完全一致的情况。
建议新增模糊匹配功能,比如设定关键词"Hello World!",可响应"Hello World", "Hello world", "hello world"等与关键词高度相似但不完全一致的关键词。

按教程的做法无法运行

在跑py文件的时候报错
Traceback (most recent call last):
File "e:/robot/sagiri-bot-master/sagiri_bot.py", line 31, in
from SAGIRIBOT.process.group_message_process import group_message_process
File "e:\robot\sagiri-bot-master\SAGIRIBOT\process\group_message_process.py", line 144
if achievement_list := await chat_achievement_check(group_id, sender):
^
SyntaxError: invalid syntax

建议优化语音/闪照/特殊卡片内容的反撤回功能

撤回语音条时机器人仅发送语音(如图),日志输出如下:
[2021-06-14 19:53:05,063][INFO]: [BOT 12345678901] Group(123456789) <- 'Admin 撤回了 User 的一条消息:\n\n[mirai:voice:**********6F5B4D4FF335B81BCE2C95.amr]'

建议反撤回时设置识别功能,若为语音则分条发送。
如先发送Admin 撤回了 User 的一条消息:,再发送[mirai:voice:**********6F5B4D4FF335B81BCE2C95.amr]

A21773F6-453A-4509-9E4A-8FA9E95ED460

-----17/6/20 Edited
撤回后重发送的语音条可播放(是我当时网络环境有问题),但是 sagiri-bot 发送的文本部分不会显示,闪照同理。
特殊卡片内容如王者荣耀分享卡片等,在控制台内显示 QQ 版本过低,撤回后机器人发送空白内容(暂时无法复现, 大概如下所示)
'Admin 撤回了 User 的一条消息:\n\n'
建议反撤回时过滤该类特殊卡片消息。

[bug]获取新番时间表的功能无法使用

使用获取bilibili7日内新番时间表的handler时发生错误:

Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/graia/broadcast/init.py", line 204, in Executor
result = await run_always_await_safely(
File "/usr/local/lib/python3.8/site-packages/graia/broadcast/utilles.py", line 30, in run_always_await_safely
return await callable(*args, **kwargs)
File "main.py", line 73, in group_message_handler
if await g_handler.handle(app, message, group, member):
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/MessageHandler.py", line 67, in handle
await g
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/Handlers/BiliBiliBangumiScheduleHandler.py", line 29, in handle
set_result(message, await self.formatted_output_bangumi(days))
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/decorators.py", line 65, in wrapper
return await func(*args, **kwargs)
TypeError: formatted_output_bangumi() missing 2 required positional arguments: 'member' and 'days'

缺少了两个参数

WebSocket 已启用但是访问 Web 前端时提示 404

如题,按照#46 修改或者使用原文件时均无法通过端口 8000 访问 Web 前端,但是通过端口 8001 可正常使用 WebSocket。
GET http://[外网IP/域名]:8000/ 404 (Not Found)
GET http://127.0.0.1:8000/ 404 (Not Found)

Linux 环境下词云无法生成

如题,排查后确认为大小写问题,将 Handler/Handlers/GroupWordCloudGeneratorHandler.py 第88行修改为 mask = np.array(IMG.open(f'statics/wordCloud/back.jpg')) 后可以解决

原报错信息:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/graia/broadcast/__init__.py", line 204, in Executor
    result = await run_always_await_safely(
  File "/usr/local/lib/python3.8/site-packages/graia/broadcast/utilles.py", line 30, in run_always_await_safely
    return await callable(*args, **kwargs)
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/GroupWordCloudGeneratorHandler.py", line 33, in abbreviated_prediction_handler
    if result := await GroupWordCloudGeneratorHandler.handle(app, message, group, member):
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/GroupWordCloudGeneratorHandler.py", line 47, in handle
    return await GroupWordCloudGeneratorHandler.get_review(group, member, "month", "member")
  File "/root/sagiri-bot/SAGIRIBOT/decorators.py", line 78, in wrapper
    return await func(*args, **kwargs)
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/GroupWordCloudGeneratorHandler.py", line 182, in get_review
    Image.fromUnsafeBytes(await GroupWordCloudGeneratorHandler.draw_word_cloud(top_n))
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/GroupWordCloudGeneratorHandler.py", line 88, in draw_word_cloud
    mask = np.array(IMG.open(f'statics/wordcloud/back.jpg'))
  File "/usr/local/lib/python3.8/site-packages/PIL/Image.py", line 2904, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'statics/wordcloud/back.jpg'

关于config文件里数据库链接设置的问题

在启动和群里有消息发送时报错:

Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\engine\base.py", line 1705, in _execute_context
self.dialect.do_execute(
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\engine\default.py", line 681, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: setting

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

Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\graia\broadcast_init_.py", line 204, in Executor
result = await run_always_await_safely(
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\graia\broadcast\utilles.py", line 30, in run_always_await_safely
return await callable(*args, **kwargs)
File "C:\Users\Administrator\Desktop\Mirai Dice 20210115\sagiri-bot-2.0.2\main.py", line 75, in init
await AppCore.get_core_instance().bot_launch_init()
File "C:\Users\Administrator\Desktop\Mirai Dice 20210115\sagiri-bot-2.0.2\SAGIRIBOT\Core\AppCore.py", line 112, in bot_launch_init
orm.session.query(Setting).update({"active": False})
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\orm\query.py", line 3163, in update
result = self.session.execute(
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\orm\session.py", line 1653, in execute
result = conn._execute_20(statement, params or {}, execution_options)
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\engine\base.py", line 1520, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\sql\elements.py", line 313, in _execute_on_connection
return connection._execute_clauseelement(
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\engine\base.py", line 1389, in _execute_clauseelement
ret = self._execute_context(
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\engine\base.py", line 1748, in _execute_context
self.handle_dbapi_exception(
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\engine\base.py", line 1929, in handle_dbapi_exception
util.raise
(
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\util\compat.py", line 198, in raise

raise exception
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\engine\base.py", line 1705, in _execute_context
self.dialect.do_execute(
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\engine\default.py", line 681, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: setting
[SQL: UPDATE setting SET active=?]
[parameters: (0,)]
(Background on this error at: http://sqlalche.me/e/14/e3q8)

dblink配置是sqlite:///data.db,会在文件夹下生成data.db文件但是该文件为0kb
想询问您一下该如何设置才能正确使用

[help]运行报错

在尝试运行时发生错误:

(botspy) Z:\boynextdoor\bin\sagiri-bot>python sagiri_bot.py
Traceback (most recent call last):
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\font_manager.py", line 1429, in
fontManager = json_load(fmcache)
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\font_manager.py", line 1013, in json_load
return json.load(fh, object_hook=json_decode)
File "c:\users\wy\appdata\local\programs\python\python38\lib\json_init
.py", line 293, in load
return loads(fp.read(),
File "c:\users\wy\appdata\local\programs\python\python38\lib\json_init
.py", line 370, in loads
return cls(**kw).decode(s)
File "c:\users\wy\appdata\local\programs\python\python38\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\users\wy\appdata\local\programs\python\python38\lib\json\decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ':' delimiter: line 5934 column 13 (char 149822)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "sagiri_bot.py", line 31, in
from SAGIRIBOT.process.group_message_process import group_message_process
File "Z:\boynextdoor\bin\sagiri-bot\SAGIRIBOT\process\group_message_process.py", line 44, in
from SAGIRIBOT.functions.petpet import petpet
File "Z:\boynextdoor\bin\sagiri-bot\SAGIRIBOT\functions\petpet.py", line 3, in
from moviepy.editor import ImageSequenceClip as imageclip
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\moviepy\editor.py", line 60, in
from .video.io.sliders import sliders
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\moviepy\video\io\sliders.py", line 1, in
import matplotlib.pyplot as plt
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\pyplot.py", line 36, in
import matplotlib.colorbar
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\colorbar.py", line 44, in
import matplotlib.contour as contour
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\contour.py", line 16, in
import matplotlib.font_manager as font_manager
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\font_manager.py", line 1431, in
_rebuild()
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\font_manager.py", line 1425, in _rebuild
json_dump(fontManager, _fmcache)
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\font_manager.py", line 997, in json_dump
with cbook.lock_path(filename), open(filename, 'w') as fh:
File "c:\users\wy\appdata\local\programs\python\python38\lib\contextlib.py", line 113, in enter
return next(self.gen)
File "Z:\boynextdoor\botspy\botspy\lib\site-packages\matplotlib\cbook_init
.py", line 1805, in _lock_path
raise TimeoutError("""
TimeoutError: Lock error: Matplotlib failed to acquire the following lock file:
C:\Users\wy.matplotlib\fontlist-v330.json.matplotlib-lock
This maybe due to another process holding this lock file. If you are sure no
other Matplotlib process is running, remove this file and try again.

群名包括汉字(?)时在启动时输出警告

输出内容如下

[2021-06-04 13:15:23,556][WARNING]: /usr/local/lib/python3.8/site-packages/aiomysql/cursors.py:239: Warning: Incorrect string value: '\xF0\x9F\x87\xA8\xF0\x9F...' for column 'group_name' at row 1
  await self._query(query)

将表settinggroup_name的排序规则改为utf8mb4_general_ci后不再输出警告。

[Help]Tuple list out of range

大佬您好,首先再次感谢您的机器人。以下是日志:

[2021-01-13 17:30:45,762][INFO]: 3419347622: [髪国异性渴望学术互助♂(¦3[▓▓]交友���(127914738] L(843684354) -> '[mirai:source:141739,1610530245]不对应该是老海神了'
接收到组髪国异性渴望学术互助♂(¦3[▓▓]交友���中来自L的消息:不对应该是老海神了
[2021-01-13 17:30:45,765][DEBUG]: caching sha2: succeeded by fast path.
Traceback (most recent call last):
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/graia/broadcast/__init__.py", line 323, in Executor
    target_callable, **parameter_compile_result
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/graia/broadcast/utilles.py", line 20, in run_always_await_safely
    return await callable(*args, **kwargs)
  File "sagiri_bot.py", line 235, in group_message_listener
    if await get_setting(group.id, "repeat"):
  File "/root/sagiri-bot-master/SAGIRIBOT/data_manage/get_data/get_setting.py", line 23, in get_setting
    return data[0][0]
IndexError: tuple index out of range

只要这个群来消息,100%出现这个问题,我和机器人私拉的群没有此问题。
环境是MySQL 8.0CentOS 7Mirai是最新版的2.0-RC,使用官方安装器(MCL)启动,HttpApi是最新的。

阻塞问题

在处理过程中会发生阻塞,正在寻找问题并修复

群词云优化

优化词云字典,使得词云中的词更能代表群中的内容

重构计划

计划要完成的事项

  • 优化代码结构
  • 优化内部逻辑
  • 支持插件加载
  • 使用ORM框架
  • 添加一些新功能
  • 完整的使用文档
  • 更加简洁的管理指令
  • 友好的web端管理界面
  • 缩减无用功能,精简代码
  • 使用sqlite,不用再配置数据库

如果有想要的新功能可以在下方告诉小编哦(不是x
我会考虑考虑🕊(

网络编译器报错问题

最新版本程序,网络编译器报错,在群里发

super py3:
print('Hello World!')时报错:

2021-04-19 20:33:26.106 | ERROR | asyncio.events:_run:81 - An error has been caught in function '_run', process 'MainProcess' (34112), thread 'MainThread' (32936):
Traceback (most recent call last):

File "C:\Users\Administrator\Desktop\Mirai Dice 20210115\sagiri-bot-2.0.2\main.py", line 70, in
core.launch()
│ └ <function AppCore.launch at 0x03FDFD60>
└ <SAGIRIBOT.Core.AppCore.AppCore object at 0x00B813A0>

File "C:\Users\Administrator\Desktop\Mirai Dice 20210115\sagiri-bot-2.0.2\SAGIRIBOT\Core\AppCore.py", line 98, in launch
self.__app.launch_blocking()
└ <SAGIRIBOT.Core.AppCore.AppCore object at 0x00B813A0>

File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\graia\application_init_.py", line 1578, in launch_blocking
loop.run_until_complete(self.getFetching()())
│ │ │ └ <function GraiaMiraiApplication.getFetching at 0x034986E8>
│ │ └ <graia.application.GraiaMiraiApplication object at 0x050DE1B0>
│ └ <function BaseEventLoop.run_until_complete at 0x02A196E8>

File "C:\Python38\lib\asyncio\base_events.py", line 603, in run_until_complete
self.run_forever()
│ └ <function ProactorEventLoop.run_forever at 0x02A7B6E8>

File "C:\Python38\lib\asyncio\windows_events.py", line 316, in run_forever
super().run_forever()

File "C:\Python38\lib\asyncio\base_events.py", line 570, in run_forever
self._run_once()
│ └ <function BaseEventLoop._run_once at 0x02A1A460>

File "C:\Python38\lib\asyncio\base_events.py", line 1859, in _run_once
handle._run()
│ └ <function Handle._run at 0x029B1BB0>
└ <Handle <TaskWakeupMethWrapper object at 0x08961118>(<_GatheringFu...specificity")>)>

File "C:\Python38\lib\asyncio\events.py", line 81, in _run
self._context.run(self._callback, *self._args)
│ │ │ │ │ └ <member '_args' of 'Handle' objects>
│ │ │ │ └ <Handle <TaskWakeupMethWrapper object at 0x08961118>(<_GatheringFu...specificity")>)>
│ │ │ └ <member '_callback' of 'Handle' objects>
│ │ └ <Handle <TaskWakeupMethWrapper object at 0x08961118>(<_GatheringFu...specificity")>)>
│ └ <member '_context' of 'Handle' objects>
└ <Handle <TaskWakeupMethWrapper object at 0x08961118>(<_GatheringFu...specificity")>)>

File "C:\Users\Administrator\Desktop\Mirai Dice 20210115\sagiri-bot-2.0.2\main.py", line 59, in group_message_handler
if result := await g_handler.handle(app, message, group, member):
│ │ │ │ │ └ Member(id=1298808723, name='画风奇特的日哥', permission=<MemberPerm.Administrator: 'ADMINISTRATOR'>, group=Group(id=920870447, name=...
│ │ │ │ └ Group(id=920870447, name='鸦巢', accountPerm=<MemberPerm.Member: 'MEMBER'>)
│ │ │ └ MessageChain((Source(id=278160, time=datetime.datetime(2021, 4, 19, 12, 33, 20, tzinfo=datetime.timezone.utc)), Plain(type='P...
│ │ └ <graia.application.GraiaMiraiApplication object at 0x050DE1B0>
│ └ <function GroupMessageHandler.handle at 0x052DA658>
└ <SAGIRIBOT.Handler.MessageHandler.GroupMessageHandler object at 0x052D0FD0>

File "C:\Users\Administrator\Desktop\Mirai Dice 20210115\sagiri-bot-2.0.2\SAGIRIBOT\Handler\MessageHandler.py", line 73, in handle
await g
└ <_GatheringFuture finished exception=ArgumentError("Textual column expression 'compile' should be explicitly declared with te...

File "C:\Users\Administrator\Desktop\Mirai Dice 20210115\sagiri-bot-2.0.2\SAGIRIBOT\Handler\Handlers\NetworkCompilerHandler.py", line 27, in handle
if not await get_setting(group.id, "compile"):
│ │ └ 920870447
│ └ Group(id=920870447, name='鸦巢', accountPerm=<MemberPerm.Member: 'MEMBER'>)
└ <function get_setting at 0x05FD7220>

File "C:\Users\Administrator\Desktop\Mirai Dice 20210115\sagiri-bot-2.0.2\SAGIRIBOT\utils.py", line 183, in get_setting
if result := list(orm.fetchone(select(setting).where(Setting.group_id == group_id))):
│ │ │ │ │ │ └ 920870447
│ │ │ │ │ └ <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x03FA4A78>
│ │ │ │ └ <class 'SAGIRIBOT.ORM.Tables.Setting'>
│ │ │ └ 'compile'
│ │ └ <function select at 0x0387B3D0>
│ └ <function Engine.fetchone at 0x03F07A48>
└ <SAGIRIBOT.ORM.ORM.ORM object at 0x03E919A0>

File "", line 2, in select
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\sql\selectable.py", line 4876, in _create
return cls._create_future_select(*args)
│ │ └ ('compile',)
│ └ <classmethod object at 0x03824A48>
└ <class 'sqlalchemy.sql.selectable.Select'>
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\sql\selectable.py", line 4816, in _create_future_select
self._raw_columns = [
└ <sqlalchemy.sql.selectable.Select object at 0x03FAD760>
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\sql\selectable.py", line 4817, in
coercions.expect(
│ └ <function expect at 0x03618BF8>
└ <module 'sqlalchemy.sql.coercions' from 'C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalch...
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\sql\coercions.py", line 175, in expect
resolved = impl._literal_coercion(
│ └ <function _CoerceLiterals._literal_coercion at 0x0362D0B8>
└ <sqlalchemy.sql.coercions.ColumnsClauseImpl object at 0x0362B808>
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\sql\coercions.py", line 375, in _literal_coercion
return self._text_coercion(element, argname, **kw)
│ │ │ │ └ {}
│ │ │ └ None
│ │ └ 'compile'
│ └ <function ColumnsClauseImpl._text_coercion at 0x0362D970>
└ <sqlalchemy.sql.coercions.ColumnsClauseImpl object at 0x0362B808>
File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\sql\coercions.py", line 808, in _text_coercion
raise exc.ArgumentError(
│ └ <class 'sqlalchemy.exc.ArgumentError'>
└ <module 'sqlalchemy.exc' from 'C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\sqlalchemy\exc.py'>

sqlalchemy.exc.ArgumentError: Textual column expression 'compile' should be explicitly declared with text('compile'), or use column('compile') for more specificity

并导致整个框架卡死需要重启

自己修改了一下插件,然后再运行就出错了

Traceback (most recent call last):
File "main.py", line 13, in
from WebManager.websocket import set_log
File "C:\Users\Administrator\Desktop\New\sagiri-bot-master\sagiri-bot-master\WebManager\websocket.py", line 6, in
from SAGIRIBOT.utils import get_config
File "C:\Users\Administrator\Desktop\New\sagiri-bot-master\sagiri-bot-master\SAGIRIBOT\utils.py", line 21, in
from SAGIRIBOT.ORM.AsyncORM import orm
File "C:\Users\Administrator\Desktop\New\sagiri-bot-master\sagiri-bot-master\SAGIRIBOT\ORM\AsyncORM.py", line 128, in
orm = AsyncORM(DB_LINK)
File "C:\Users\Administrator\Desktop\New\sagiri-bot-master\sagiri-bot-master\SAGIRIBOT\ORM\AsyncORM.py", line 85, in init
super().init(conn)
File "C:\Users\Administrator\Desktop\New\sagiri-bot-master\sagiri-bot-master\SAGIRIBOT\ORM\AsyncORM.py", line 35, in init
self.engine = create_async_engine(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\ext\asyncio\engine.py", line 48, in create_async_engine
return AsyncEngine(sync_engine)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\ext\asyncio\engine.py", line 534, in init
raise exc.InvalidRequestError(
sqlalchemy.exc.InvalidRequestError: The asyncio extension requires an async driver to be used. The loaded 'pysqlite' is not async.

删除重新下载也不行,不知道是哪的问题

运行出错

大佬你好,我在使用过程中出现了这几个报错,该如何解决呢

[2021-02-09 16:44:54,924][ ERROR]: An open stream object is being garbage collected; call "stream.close()" explicitly.

Bot init end
Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\site-packages\graia\broadcast\__init__.py", line 298, in Executor
    parameter_compile_result[name] = await dii.lookup_param(
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\site-packages\graia\broadcast\interfaces\dispatcher.py", line 252, in lookup_param
    raise RequirementCrashed(
graia.broadcast.exceptions.RequirementCrashed: ('the dispatching requirement crashed: ', 'group', <class 'graia.application.group.Group'>, None)

删除回复关键词时报错 IndexError: tuple index out of range

如题,报错内容如下。

2021-05-28 14:01:40.509 | INFO     | __main__:group_message_handler:52 - 收到来自群 <groupName> 中成员 <memberName> 的消息:删除回复关键词#keyword
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/graia/broadcast/__init__.py", line 204, in Executor
    result = await run_always_await_safely(
  File "/usr/local/lib/python3.8/site-packages/graia/broadcast/utilles.py", line 30, in run_always_await_safely
    return await callable(*args, **kwargs)
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/KeywordReplyHandler.py", line 36, in abbreviated_prediction_handler
    if result := await KeywordReplyHandler.handle(app, message, group, member):
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/KeywordReplyHandler.py", line 56, in handle
    return await KeywordReplyHandler.delete_keyword(app, message_serialization, group, member)
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/KeywordReplyHandler.py", line 142, in delete_keyword
    content_type = result[1]
IndexError: tuple index out of range

使用的数据库为 MySQL

[bug]有关获取bilibili新番时间表的新问题

今日使用获取新番时间的handler时出现了新的报错:

Building prefix dict from the default dictionary ...
[2021-04-24 12:34:31,643][DEBUG]: Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
[2021-04-24 12:34:31,643][DEBUG]: Loading model from cache /tmp/jieba.cache
Loading model cost 0.604 seconds.
[2021-04-24 12:34:32,247][DEBUG]: Loading model cost 0.604 seconds.
Prefix dict has been built successfully.
[2021-04-24 12:34:32,248][DEBUG]: Prefix dict has been built successfully.
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/graia/broadcast/init.py", line 204, in Executor
result = await run_always_await_safely(
File "/usr/local/lib/python3.8/site-packages/graia/broadcast/utilles.py", line 30, in run_always_await_safely
return await callable(*args, **kwargs)
File "main.py", line 71, in group_message_handler
if await g_handler.handle(app, message, group, member):
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/MessageHandler.py", line 73, in handle
await g
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/Handlers/BiliBiliBangumiScheduleHandler.py", line 29, in handle
set_result(message, await self.formatted_output_bangumi(group, member, days))
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/decorators.py", line 65, in wrapper
return await func(*args, **kwargs)
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/Handlers/BiliBiliBangumiScheduleHandler.py", line 115, in formatted_output_bangumi
formatted_bangumi_data = await BiliBiliBangumiScheduleHandler.get_formatted_new_bangumi_json()
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/Handlers/BiliBiliBangumiScheduleHandler.py", line 92, in get_formatted_new_bangumi_json
temp_bangumi_data_dict["pub_index"] = data["pub_index"]
KeyError: 'pub_index'

无法从外网直接访问 Web 前端

运行 Sagiri-Bot 且配置开启 Web 前端后,只能从本机访问 Web 前端,从外网无法访问。
分别将 /WebManager/web_manager.py 的第 99 行 与 /WebManager/websocket.py 的第 27 行中的 127.0.0.1 修改为本机外网 IP 地址后可正常访问。
希望后续版本能把这个写在配置文件中,让用户决定是否只可在本机访问。(能用 SSL 的话更好了,不用每次都切隐私模式)

模块引用错误?

这里写得缺失graia.broadcast.entities.exectarget模块,但是graia已经装了,pip也搜素不到这个模块

接受群消息时发生报错

日志如下 python3.8 mysql8.0.23
2021-04-21 18:59:26.316 | ERROR | SAGIRIBOT.Handler.MessageHandler:handle:59 - Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1705, in _execute_context
self.dialect.do_execute(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\default.py", line 681, in do_execute
cursor.execute(statement, parameters)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\MySQLdb\cursors.py", line 206, in execute
res = self._query(query)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\MySQLdb\cursors.py", line 319, in _query
db.query(q)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\MySQLdb\connections.py", line 259, in query
_mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1054, "Unknown column 'setting.group_id' in 'where clause'")

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

Traceback (most recent call last):
File "D:\学习资料1\sagiri-bot-2.0.2\SAGIRIBOT\Handler\MessageHandler.py", line 54, in handle
if result := await self.__head_handler.handle(app, message, group, member):
File "D:\学习资料1\sagiri-bot-2.0.2\SAGIRIBOT\Handler\Handler.py", line 62, in handle
if not await get_setting(group.id, Setting.switch) and member.id not in await get_admins(group):
File "D:\学习资料1\sagiri-bot-2.0.2\SAGIRIBOT\utils.py", line 177, in get_setting
if result := list(orm.fetchone(select(setting).where(Setting.group_id == group_id))):
File "D:\学习资料1\sagiri-bot-2.0.2\SAGIRIBOT\ORM\ORM.py", line 49, in fetchone
result = self.execute(sql)
File "D:\学习资料1\sagiri-bot-2.0.2\SAGIRIBOT\ORM\ORM.py", line 42, in execute
return self.engine.execute(sql, **kwargs)
File "", line 2, in execute
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\util\deprecations.py", line 390, in warned
return fn(*args, **kwargs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 3009, in execute
return connection.execute(statement, *multiparams, **params)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1200, in execute
return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\elements.py", line 313, in _execute_on_connection
return connection._execute_clauseelement(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1389, in _execute_clauseelement
ret = self._execute_context(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1748, in _execute_context
self.handle_dbapi_exception(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1929, in handle_dbapi_exception
util.raise
(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\util\compat.py", line 198, in raise

raise exception
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1705, in _execute_context
self.dialect.do_execute(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\default.py", line 681, in do_execute
cursor.execute(statement, parameters)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\MySQLdb\cursors.py", line 206, in execute
res = self._query(query)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\MySQLdb\cursors.py", line 319, in _query
db.query(q)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\MySQLdb\connections.py", line 259, in query
_mysql.connection.query(self, query)
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1054, "Unknown column 'setting.group_id' in 'where clause'")
[SQL: SELECT setting.switch
FROM setting
WHERE setting.group_id = %s]

[Bug] 群名太长或者可能有不支持字符就报错

大佬您好,首先感谢您的机器人。

[2021-01-13 17:20:48,504][DEBUG]: caching sha2: succeeded by fast path.
[2021-01-13 17:20:48,543][DEBUG]: caching sha2: succeeded by fast path.
127914738 : 髪国异性渴望学术互助♂(¦3[▓▓]交友���
[2021-01-13 17:20:48,560][DEBUG]: caching sha2: succeeded by fast path.
Traceback (most recent call last):
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/graia/broadcast/__init__.py", line 323, in Executor
    target_callable, **parameter_compile_result
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/graia/broadcast/utilles.py", line 20, in run_always_await_safely
    return await callable(*args, **kwargs)
  File "sagiri_bot.py", line 199, in bot_init
    await check_group_data_init(group_list)
  File "/root/sagiri-bot-master/SAGIRIBOT/basics/check_group_data_init.py", line 24, in check_group_data_init
    await execute_sql(sql)
  File "/root/sagiri-bot-master/SAGIRIBOT/basics/aio_mysql_excute.py", line 103, in execute_sql
    res = await cursor.execute(sql)
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/aiomysql/cursors.py", line 239, in execute
    await self._query(query)
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/aiomysql/cursors.py", line 457, in _query
    await conn.query(q)
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/aiomysql/connection.py", line 428, in query
    await self._read_query_result(unbuffered=unbuffered)
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/aiomysql/connection.py", line 622, in _read_query_result
    await result.read()
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/aiomysql/connection.py", line 1105, in read
    first_packet = await self.connection._read_packet()
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/aiomysql/connection.py", line 593, in _read_packet
    packet.check_error()
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/pymysql/protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "/root/Fake_Search_Engine/test_venv/lib/python3.7/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.DataError: (1406, "Data too long for column 'groupName' at row 1")

群名:
髪国异性渴望学术互助♂(¦3[▓▓]交友🔞🚱🚷
image
草,现在才发现,这个群名好奇怪。
环境是MySQL 8.0CentOS 7Mirai是最新版的2.0-RC,使用官方安装器(MCL)启动,HttpApi是最新的。但是有一个问题,就是graia.broadcastgraia.scheduler的版本似乎低于graia.application所要求的版本,我使用较新版本的只有pip的警告,暂时来看消息接收正常。
以及您requirements.txt里面没有写graia相关的包。

Mysql报错

Traceback (most recent call last):
  File "main.py", line 12, in <module>
    from SAGIRIBOT.Handler.Handlers import *
  File "PATH/bot/sagiri-bot-2.0.4/SAGIRIBOT/Handler/__init__.py", line 1, in <module>
    from .MessageHandler import GroupMessageHandler, FriendMessageHandler, TempMessageHandler
  File "PATH/bot/sagiri-bot-2.0.4/SAGIRIBOT/Handler/MessageHandler.py", line 11, in <module>
    from SAGIRIBOT.Core.AppCore import AppCore
  File "PATH/bot/sagiri-bot-2.0.4/SAGIRIBOT/Core/AppCore.py", line 16, in <module>
    from SAGIRIBOT.ORM.ORM import orm
  File "PATH/bot/sagiri-bot-2.0.4/SAGIRIBOT/ORM/ORM.py", line 116, in <module>
    orm = ORM(DB_LINK)
  File "PATH/bot/sagiri-bot-2.0.4/SAGIRIBOT/ORM/ORM.py", line 78, in __init__
    super().__init__(conn)
  File "PATH/bot/sagiri-bot-2.0.4/SAGIRIBOT/ORM/ORM.py", line 31, in __init__
    self.engine = create_engine(
  File "<string>", line 2, in create_engine
  File "PATH/.local/lib/python3.8/site-packages/sqlalchemy/util/deprecations.py", line 298, in warned
    return fn(*args, **kwargs)
  File "PATH/.local/lib/python3.8/site-packages/sqlalchemy/engine/create.py", line 548, in create_engine
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "PATH/.local/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 167, in dbapi
    return __import__("MySQLdb")
ModuleNotFoundError: No module named 'MySQLdb'
Exception ignored in: <function ORM.__del__ at 0x7f684b9a6310>
Traceback (most recent call last):
  File "PATH/bot/sagiri-bot-2.0.4/SAGIRIBOT/ORM/ORM.py", line 85, in __del__
    self.session.close()
AttributeError: 'ORM' object has no attribute 'session'

mysql版本 :5.7
py版本: Python 3.8.5
pip版本: pip 20.0.2
aiomysql 0.0.21
SQLAlchemy 1.4.15

此外 requirements.txt 好像少了 graia-scheduler 这个依赖

使用方法

大佬能教一下使用方法吗,mirai console已经大概装好了

在解析bilibili小程序时报错

解析bilibili小程序的时候报错:

Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/graia/broadcast/init.py", line 204, in Executor
result = await run_always_await_safely(
File "/usr/local/lib/python3.8/site-packages/graia/broadcast/utilles.py", line 30, in run_always_await_safely
return await callable(*args, **kwargs)
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/Handlers/BilibiliAppParserHandler.py", line 25, in abbreviated_prediction_handler
if result := await BilibiliAppParserHandler.handle(app, message, group, member):
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/Handlers/BilibiliAppParserHandler.py", line 53, in handle
return MessageItem(await BilibiliAppParserHandler.generate_messagechain(result), Normal(GroupStrategy()))
File "/home/aqiang/project/mcl-1.0.4/sagiri-bot/SAGIRIBOT/Handler/Handlers/BilibiliAppParserHandler.py", line 102, in generate_messagechain
chain_list.append(Plain(text=f"\n【分区】{bilibili_partition_dict[str(data['tid'])]['name']}->{data['tname']}\n"))
KeyError: '228'

[Help]__new__() missing 1 required positional argument: 'frequency_limit_dict'

大佬您好,麻烦您了。

接收到组测试群组中来自爬的消息:pdf hi
[2021-01-13 17:21:44,842][DEBUG]: caching sha2: succeeded by fast path.
[2021-01-13 17:21:44,856][DEBUG]: caching sha2: succeeded by fast path.
[2021-01-13 17:21:44,859][DEBUG]: caching sha2: succeeded by fast path.
[2021-01-13 17:21:44,861][DEBUG]: caching sha2: succeeded by fast path.
[2021-01-13 17:21:44,879][DEBUG]: caching sha2: succeeded by fast path.
[2021-01-13 17:21:45,076][INFO]: [BOT 3419347622] Group(595895111) <- "__new__() missing 1 required positional argument: 'frequency_limit_dict'"

以下是配置文件:

{
    "BotQQ": 341****622,
    "HostQQ": ********,
    "authKey": "authKey*******",
    "miraiHost": "localhost:8880/",
    "dbHost": "127.0.0.1",
    "dbName": "qqbot",
    "dbUser": "qqbot",
    "dbPass": "*********",
    "setuPath": "/root/qqbotcache/setuPath",
    "setu18Path": "/root/qqbotcache/setu18Path",
    "realPath": "/root/qqbotcache/realPath",
    "realHighqPath": "/root/qqbotcache/realHighqPath",
    "searchPath": "/root/qqbotcache/searchPath",
    "yellowJudgePath": "/root/qqbotcache/yellowJudgePath",
    "clockWallpaperPreviewPath": "/root/qqbotcache/clockWallpaperPreviewPath",
    "clockWallpaperSavedPath": "/root/qqbotcache/clockWallpaperSavedPath",
    "tributePath": "/root/qqbotcache/tributePath",
    "wallpaperPath": "/root/qqbotcache/wallpaperPath",
    "imgSavePath": "/root/qqbotcache/imgSavePath",
    "listenImagePath": "/root/qqbotcache/listenImagePath",
    "steamSearchPath": "/root/qqbotcache/steamSearchPath",
    "txAppId": "",
    "txAppKey": "",
    "shadiaoAppName": "",
    "environment": "",
    "oldVersion": "",
    "newVersion": "",
    "repeat": "True"
}

运行py文件时发生ImportError

报错如下:
C:\Users\Administrator\Desktop\sagiri\sagiri-bot-master>py -m sagiri_bot.py Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 188, in _run_module_as_main mod_name, mod_spec, code = _get_module_details(mod_name, _Error) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 111, in _get_module_details __import__(pkg_name) File "C:\Users\Administrator\Desktop\sagiri\sagiri-bot-master\sagiri_bot.py", line 31, in <module> from SAGIRIBOT.process.group_message_process import group_message_process File "C:\Users\Administrator\Desktop\sagiri\sagiri-bot-master\SAGIRIBOT\process\group_message_process.py", line 38, in <module> from SAGIRIBOT.data_manage.get_data.get_rank import get_total_rank ImportError: cannot import name 'get_total_rank' from 'SAGIRIBOT.data_manage.get_data.get_rank' (C:\Users\Administrator\Desktop\sagiri\sagiri-bot-master\SAGIRIBOT\data_manage\get_data\get_rank.py)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.