ekonda / kutana

The library for developing systems for messengers and social networks
MIT License
72 stars 17 forks source link

[BUG] Перестает тригериться один из декораторов on_payloads #61

Closed daeeros closed 3 years ago

daeeros commented 3 years ago

Для воспроивзедения потребуется создать 2 плагина, отдельным файлом друг от друга. plugin_first.py:

import json
from kutana import Plugin

plugin = Plugin("kb2")

ac_name = "accept"
dc_name = "decline"

@plugin.vk.on_payloads([ac_name, dc_name])
@plugin.on_commands(["kb2"])
async def __(msg, ctx):

    if hasattr(ctx, "payload"):
        return await ctx.reply("TRIGGERED")

    await ctx.reply("hey", keyboard=json.dumps({
        "inline": True,
        "buttons": [
            [
                {
                    "action": {"type": "text", "payload": f"\"{ac_name}\"", "label": "✅ Принять"},
                    "color": "positive",
                },
                {
                    "action": {"type": "text", "payload": f"\"{dc_name}\"", "label": "❌ Отказать"},
                    "color": "negative",
                },
            ],
        ],
    }))

plugin_second.py:

import json
from kutana import Plugin

plugin = Plugin("kb")

@plugin.vk.on_payloads([{"kind": "1"}])
async def __(msg, ctx):
    await ctx.reply(f"Handler for kind (1), your meta is '{ctx.payload['meta']}'")

@plugin.vk.on_payloads([{"kind": "2"}])
async def __(msg, ctx):
    await ctx.reply(f"Handler for kind (2), your meta is '{ctx.payload['meta']}'")

@plugin.on_commands(["kb"])
async def __(msg, ctx):
    await ctx.reply("hey", keyboard=json.dumps({
        "one_time": True,
        "buttons": [
            [
                {"action": {
                        "type":"text",
                        "label": "kind=1, meta=2", "payload": "{\"kind\": \"1\", \"meta\": \"2\"}"
                }}
            ],
            [
                {"action": {
                        "type":"text",
                        "label": "kind=1, meta=4", "payload": "{\"kind\": \"1\", \"meta\": \"4\"}"
                }}
            ],
            [
                {"action": {
                        "type":"text",
                        "label": "kind=2, meta=4", "payload": "{\"kind\": \"1\", \"meta\": \"4\"}"
                }}
            ],
        ]
    }))

При использовании конструкции on_payloads в plugin_first, в следующем нашем plugin_second перестает срабатывать тригер @plugin.vk.on_payloads([{"kind": "1"}]) и @plugin.vk.on_payloads([{"kind": "2"}]) но если не использовать кострукцию из первого плагина, все срабатывает нормально.