yirimiraiproject / yirimirai Goto Github PK
View Code? Open in Web Editor NEW一个轻量级、低耦合的基于 mirai-api-http 的 Python SDK。
Home Page: https://yiri-mirai.wybxc.cc
License: GNU Affero General Public License v3.0
一个轻量级、低耦合的基于 mirai-api-http 的 Python SDK。
Home Page: https://yiri-mirai.wybxc.cc
License: GNU Affero General Public License v3.0
The bot created this issue to inform you that pyup.io has been set up on this repo.
Once you have closed it, the bot will open pull requests for updates as soon as they are available.
如题
2022-12-14 03:10:27 E/console: net.mamoe.mirai.network.WrongPasswordException: Error(bot=Bot(xxxxxx), code=235, title=温馨提示, message=当前QQ版本过低,请升级至最新版本后再登录。点击进入下载页面, errorInfo=)
net.mamoe.mirai.network.WrongPasswordException: Error(bot=Bot(xxxxxx), code=235, title=温馨提示, message=当前QQ版本过低,请升级至最新版本后再登录。点击进入下载页面, errorInfo=)
at net.mamoe.mirai.internal.network.components.SsoProcessorImpl$SlowLoginImpl.doLogin(SsoProcessor.kt:311)
at net.mamoe.mirai.internal.network.components.SsoProcessorImpl$SlowLoginImpl$doLogin$1.invokeSuspend(SsoProcessor.kt)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:33)
at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:102)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
我是这个框架的老用户了,其他框架都用不惯,结果作者停更了(悲)
直接使用‘==’对MessageChain对象进行比较时,会同时比较MessageChain的Source组件,导致mirai码相同的消息链的比较结果为False
需要一个只对消息内容进行比较的方法
草了
翻阅Yiri的源码,发现MiraiRunner类的run方法里有:
try:
asyncio.run(self._run())
except (KeyboardInterrupt, SystemExit):
exit()
现在我有一个自己写的异步任务:
async def test():
while 1:
print("hello")
await asyncio.sleep(3)
我该如何加进去?
@bot.on(GroupMessage)
async def on_group_message(event: GroupMessage):
msg = str(event.message_chain)
if msg == 'image':
return bot.send(event, [Image(path='../test.png')])
if msg == 'voice':
message_id = await bot.send(event, [Voice(path='../test.silk')])
await asyncio.sleep(1)
message_chain = (await bot.message_from_id(message_id)).message_chain # 此处报错
await message_chain[Voice][0].download('../test_response.silk')
yiri-mirai版本:0.2.4.2(目前pypi的最新版)
控制台会有不少这样的错误消息:
[ERROR][2021-09-11 22:53:48,945][base_events.py][1738] Task exception was never retrieved
future: <Task finished name='Task-22' coro=<Adapter.emit() done, defined at X:\some\path\lib\site-packages\mirai\adapters\base.py:174> exception=ValueError('`OtherClientOnlineEvent` 不是 `Event` 的子类!')>
Traceback (most recent call last):
File "X:\some\path\lib\site-packages\mirai\adapters\base.py", line 183, in emit
return sum(await asyncio.gather(*coros), [])
File "X:\some\path\lib\site-packages\mirai\bus.py", line 187, in emit
for m_event in self.event_chain_generator(event):
File "X:\some\path\lib\site-packages\mirai\models\bus.py", line 23, in event_chain_parents
event_type = Event.get_subtype(event)
File "X:\some\path\lib\site-packages\mirai\models\base.py", line 90, in get_subtype
raise ValueError(f'`{name}` 不是 `{cls.__name__}` 的子类!')
ValueError: `OtherClientOnlineEvent` 不是 `Event` 的子类!
看起来在其他客户端登录了bot的QQ时,会出现这个错误。
INFO: Started server process [1772]
INFO: Waiting for application startup.
2022-08-09 15:47:17 - ERROR As of 3.10, the loop parameter was removed from Lock() since it is no longer necessary
ERROR: Traceback (most recent call last):
File "/usr/lib/python3.10/lib/python3.10/site-packages/starlette/routing.py", line 645, in lifespan
async with self.lifespan_context(app):
File "/usr/lib/python3.10/lib/python3.10/site-packages/starlette/routing.py", line 540, in aenter
await self._router.startup()
File "/usr/lib/python3.10/lib/python3.10/site-packages/starlette/routing.py", line 622, in startup
await handler()
File "/usr/lib/python3.10/lib/python3.10/site-packages/mirai/bot.py", line 226, in startup
await asyncio.gather(*coros)
File "/usr/lib/python3.10/lib/python3.10/site-packages/mirai/bot.py", line 135, in startup
await self._adapter.login(self.qq)
File "/usr/lib/python3.10/lib/python3.10/site-packages/mirai/adapters/base.py", line 35, in wrapped
return await func(self, *args, **kwargs)
File "/usr/lib/python3.10/lib/python3.10/site-packages/mirai/adapters/websocket.py", line 187, in login
self.connection = await connect(self.host_name, extra_headers=headers)
File "/usr/lib/python3.10/lib/python3.10/site-packages/websockets/legacy/client.py", line 622, in await_impl
transport, protocol = await self._create_connection()
File "/usr/lib/python3.10/lib/python3.10/asyncio/base_events.py", line 1089, in create_connection
transport, protocol = await self._create_connection_transport(
File "/usr/lib/python3.10/lib/python3.10/asyncio/base_events.py", line 1107, in _create_connection_transport
protocol = protocol_factory()
File "/usr/lib/python3.10/lib/python3.10/site-packages/websockets/legacy/client.py", line 160, in init
super().init(**kwargs)
File "/usr/lib/python3.10/lib/python3.10/site-packages/websockets/legacy/protocol.py", line 154, in init
self._drain_lock = asyncio.Lock(
File "/usr/lib/python3.10/lib/python3.10/asyncio/locks.py", line 78, in init
super().init(loop=loop)
File "/usr/lib/python3.10/lib/python3.10/asyncio/mixins.py", line 17, in init
raise TypeError(
TypeError: As of 3.10, the loop parameter was removed from Lock() since it is no longer necessary
ERROR: Application startup failed. Exiting.
>>> mirai.models.message.Face(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Anaconda3\lib\site-packages\mirai\models\message.py", line 761, in __init__
self.face_id = args[0]
File "pydantic\main.py", line 391, in pydantic.main.BaseModel.__setattr__
AttributeError: __fields_set__
原因:datetime.fromtimestamp(0)
会报 OSError
Adapter 和 Session 不分的现状导致了不同的 bot 实例不能复用同一个 adapter,尽管这两个 adapter 的创建参数是相同的。
[Ariadne](https://github.com/GraiaProject/Ariadne)
Python3.7使用自定义模型事件总线时,执行emit报错;
当传入event为str类型时,会调用super()的emit函数,但此时产生问题为ModelEventBus本身并没有在初始化时调用super()的初始化,且没有提供event_chain_generator,导致ModelEventBus对象不存在event_chain_generator属性;
Traceback (most recent call last):
File "sendmsgEventTest.py", line 143, in thread_listen
await mbus.emit(event, msgs)
File "/usr/local/lib/python3.7/dist-packages/mirai/models/bus.py", line 119, in emit
return await super().emit(event, *args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/mirai/bus.py", line 187, in emit
for m_event in self.event_chain_generator(event):
AttributeError: 'ModelEventBus' object has no attribute 'event_chain_generator'
Task exception was never retrieved
future: <Task finished name='Task-12' coro=<Mirai.send() done, defined at E:\YiriMiraiProject\YiriMirai\mirai\bot.py:310> exception=ApiError(6, '[ERROR 6]指定文件不存在。', '文件不存在:D:\\mirai\\mc\\test\\..\\test.png')>
Traceback (most recent call last):
File "E:\YiriMiraiProject\YiriMirai\mirai\bot.py", line 358, in send
await
File "E:\YiriMiraiProject\YiriMirai\mirai\models\api.py", line 390, in __call__
return await self.set(*args, **kwargs)
File "E:\YiriMiraiProject\YiriMirai\mirai\models\api.py", line 351, in set
return await self._call_api(
File "E:\YiriMiraiProject\YiriMirai\mirai\models\api.py", line 328, in _call_api
raw_response = await self.api_provider.call_api(
File "E:\YiriMiraiProject\YiriMirai\mirai\bot.py", line 79, in call_api
return await self._adapter.call_api(api, *args, **kwargs)
File "E:\YiriMiraiProject\YiriMirai\mirai\adapters\compose.py", line 54, in call_api
return await self.api_channel.call_api(api, method, **params)
File "E:\YiriMiraiProject\YiriMirai\mirai\adapters\http.py", line 235, in call_api
return await self._post(client, f'/{api}', params)
File "E:\YiriMiraiProject\YiriMirai\mirai\adapters\base.py", line 34, in wrapped
return await func(self, *args, **kwargs)
File "E:\YiriMiraiProject\YiriMirai\mirai\adapters\http.py", line 133, in _post
return _parse_response(response)
File "E:\YiriMiraiProject\YiriMirai\mirai\adapters\http.py", line 27, in _parse_response
raise exceptions.ApiError(result)
mirai.exceptions.ApiError: (6, '[ERROR 6]指定文件不存在。', '文件不存在:D:\\mirai\\mc\\test\\..\\test.png')
@bot.on(GroupMessage)
def on_group_message(event: GroupMessage):
if str(event.message_chain) == '来点涩图':
setu_response = requests.get(api_setu)
setu_data = setu_response.json()
img_url = setu_data['data'][0]['urls']['original']
print(img_url)
return bot.send(event, MessageChain([Image(url=img_url), Plain('pid:'+str(setu_data['data'][0]['pid'])+'\n'+'作者:'+str(setu_data['data'][0]['author'])+'\n'+'标题:'+str(setu_data['data'][0]['title']))]))
目前的 pyproject.toml
里的 python = ">=3.7, <=3.10"
只允许使用 Python 3.10 而不允许 Python 3.10.1 之类的版本。
是因为用到了 Python 3.10.x 不兼容的特性导致如此设定的吗?
可以使用 python = "^3.7"
来限定任意高于 3.7 的 Python 3 版本。或者若要支持 3.10.x 而不允许 3.11.x 可以使用 python = ">=3.7, <3.11"
来限定版本。
@bot.on('FriendMessage')
async def handle_group_message(event: dict):
print(f"收到来自{event['sender']['nickname']的消息。}")
it throws SynatxError
.
根据文档安装 apscheduler 后
使用文档中代码运行报错
apscheduler 版本为 3.8.0
需要把 ValidationError 转为 TypeError
如题。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.