AWeirdDev / linelib

🚀 The simple yet perfect solution to launch your bot to the next level.
https://google.com/search?q=hello
MIT License
6 stars 0 forks source link

[BUG] ext.commands: Executed Twice #12

Open AWeirdDev opened 1 year ago

AWeirdDev commented 1 year ago

What happened?

I created a new cog (loaded) like so:

from linelib import Client as ClientType
from linelib.ext import commands

class CogDemo(commands.Cog):
  def __init__(self, client):
    super().__init__()
    print('inited')

  @commands.cog_command(name="test")
  async def test_command(self, ctx):
    await ctx.reply("Test.")

def setup(c: ClientType):
  c.load_cog(CogDemo(c))

...and the bot replied correctly.

But what I saw this on the console:

```sh [2023-03-02 14:21:56,075] ERROR in app: Exception on / [POST] Traceback (most recent call last): File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/connect/gate.py", line 26, in reply mk(resJson) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/connect/mkerr.py", line 9, in mk raise ClientException(f"""Error while making a request:\n ~ {resJson['message']}""") linelib.exceptions.ClientException: Error while making a request: ~ Invalid reply token During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask/app.py", line 2525, in wsgi_app response = self.full_dispatch_request() File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask/app.py", line 1822, in full_dispatch_request rv = self.handle_user_exception(e) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask_cors/extension.py", line 165, in wrapped_function return cors_after_request(app.make_response(f(*args, **kwargs))) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask/app.py", line 1820, in full_dispatch_request rv = self.dispatch_request() File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask/app.py", line 1796, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 203, in index self.emitEvents(t, context) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 107, in emitEvents loop.run_until_complete(task) File "/nix/store/hd4cc9rh83j291r5539hkf6qd8lgiikb-python3-3.10.8/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete return future.result() File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 99, in goOver await task File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 84, in doTask await handler.emit(*args, **kwargs) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/construct.py", line 24, in emit await self.func(*args, **kwargs) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 257, in on_mount res = await cog.emit(ctx) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/ext/commands.py", line 52, in emit res = await cmd.emit(self, ctx) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/ext/commands.py", line 154, in emit await self._LL_ERR(o, ctx, ERROR) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/ext/commands.py", line 177, in _LL_ERR raise err # default File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/ext/commands.py", line 151, in emit await self.func(o, ctx, *_PASS, **_NAMED) File "/home/runner/new-helper/ext/pick/__init__.py", line 14, in picked await ctx.reply([ File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/model/context.py", line 117, in reply await replyFunc(self.client, self.reply_token, messages, notification_disabled) File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/connect/gate.py", line 29, in reply raise ClientException(err) linelib.exceptions.ClientException: Error while making a request: ~ Invalid reply token ```

I believed that the request was probably sent twice, and I still cannot find where exactly occurs this sort of error.

Yes, I'll need to revise the ext.commands module.

Version

v2

Relevant log output

[2023-03-02 14:21:56,075] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/connect/gate.py", line 26, in reply
    mk(resJson)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/connect/mkerr.py", line 9, in mk
    raise ClientException(f"""Error while making a request:\n ~ {resJson['message']}""")
linelib.exceptions.ClientException: Error while making a request:
 ~ Invalid reply token

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask_cors/extension.py", line 165, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 203, in index
    self.emitEvents(t, context)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 107, in emitEvents
    loop.run_until_complete(task)
  File "/nix/store/hd4cc9rh83j291r5539hkf6qd8lgiikb-python3-3.10.8/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 99, in goOver
    await task
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 84, in doTask
    await handler.emit(*args, **kwargs)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/construct.py", line 24, in emit
    await self.func(*args, **kwargs)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/client.py", line 257, in on_mount
    res = await cog.emit(ctx)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/ext/commands.py", line 52, in emit
    res = await cmd.emit(self, ctx)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/ext/commands.py", line 154, in emit
    await self._LL_ERR(o, ctx, ERROR)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/ext/commands.py", line 177, in _LL_ERR
    raise err # default
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/ext/commands.py", line 151, in emit
    await self.func(o, ctx, *_PASS, **_NAMED)
  File "/home/runner/new-helper/ext/pick/__init__.py", line 14, in picked
    await ctx.reply([
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/model/context.py", line 117, in reply
    await replyFunc(self.client, self.reply_token, messages, notification_disabled)
  File "/home/runner/new-helper/venv/lib/python3.10/site-packages/linelib/connect/gate.py", line 29, in reply
    raise ClientException(err)
linelib.exceptions.ClientException: Error while making a request:
 ~ Invalid reply token

Just to make sure...

AWeirdDev commented 1 year ago

Note that I'm using version 2.2.6 (current latest version of 2.2), so cloning this repository won't work (for now), as noticed in the README.

-> Download source on Pypi

A new module connect.mkerr was released (HTTP error handler).