Source code for telegram_game.game

import random
import logging

import asyncio

from telegram_game.api import Chat


logger = logging.getLogger(__name__)


[docs]class BaseGame: """The base Game class Each player works with his own Game() instance. """ def __init__(self, chat_id, queue, api): self.chat_id = chat_id self.queue = queue self.api = api self.chat = Chat(api, chat_id) async def __call__(self): while True: try: await self.start() except: logger.error("%s.start() raised exception, restarting in 1s", self, exc_info=True) await asyncio.sleep(1) def __str__(self): return 'Game(chat_id={})'.format(self.chat_id) @classmethod
[docs] async def prepare(self, loop): """Prepare the game Use this method to prepare common game resources, establish the database connection, and so on. """ pass
[docs] async def send(self, msg, *args, **kwargs): if isinstance(msg, list): msg = random.choice(msg) return await self.chat.sendMessage(msg.format(*args, **kwargs))
[docs] async def recv(self): """Get the next message from player.""" return await self.queue.get()
[docs] async def start(self): """Game logic implementation starts here. Use `await self.recv()` to get input from player, and `await self.chat.sendMessage()` to send a reply. """ raise NotImplementedError()