aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/examples/plugins/cachetool.py
blob: 395589102f5727612beb6c0f35d5c992d8a2dd8c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from cachetools import cached
import time

from iamai import Plugin
from iamai.event import MessageEvent


class CachedPlugin(Plugin):
    async def handle(self) -> None:
        # without cached
        def fib(n):
            return n if n < 2 else fib(n - 1) + fib(n - 2)

        s = time.time()
        await self.event.reply(f"{fib(36)}")
        await self.event.reply(f"Time Taken: {time.time() - s}")

        # Now using cached
        s = time.time()

        # Use this decorator to enable caching
        @cached(cache={})
        def fib(n):
            return n if n < 2 else fib(n - 1) + fib(n - 2)

        await self.event.reply(f"{fib(36)}")
        await self.event.reply(f"Time Taken(cached): {time.time() - s}")

    async def rule(self) -> bool:
        return (
            isinstance(self.event, MessageEvent)
            and self.event.get_plain_text() == "/cachetools"
        )