Something went wrong. Try again.
simple utilities bot for Telegram; /ping, /whoami and such
Something went wrong. Try again.
geiser-ping main.py
2.0 kB · 80 lines
Python
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081import asyncioimport loggingimport platformimport signalfrom pathlib import Path
import clickimport coloredlogsimport tomllib
from bot import PingBot
logger = logging.getLogger(__name__)
def load_config(config_path: Path | None) -> dict: assert config_path is not None with open(config_path, "rb") as f: return tomllib.load(f)
def _raise_exit(): raise SystemExit
async def run_bot(bot: PingBot) -> None: async with bot.app: await bot.start_app() # wait for shutdown signal stop_event = asyncio.Event()
def signal_handler(sig, frame): logger.info("received shutdown signal") stop_event.set()
signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler)
await stop_event.wait() await bot.stop_app()
@click.command()@click.option( "--config", type=click.Path(exists=True, path_type=Path), default="./config.toml", help="path to config.toml file (default: ./config.toml)",)@click.option("--token", help="telegram bot token (overrides config file)")def main(config: Path | None, token: str | None) -> None: if not token and not (config and config.exists()): raise click.UsageError( ( "must provide either --token, --config or a valid config file " "at ./config.toml" ) )
bot_name = "Telegram Bot" if token: bot_token = token else: cfg = load_config(config) bot_token = cfg["telegram"]["token"] bot_name = cfg.get("telegram", {}).get("name", bot_name)
log_format = ( "[{}][%(asctime)s]%(name)s::%(levelname)s:%(message)s" ).format(bot_name.upper())
logging.basicConfig(format=log_format, level=logging.INFO) coloredlogs.install(level=logging.INFO, fmt=log_format)
bot = PingBot(bot_token, bot_name) asyncio.run(run_bot(bot))
if __name__ == "__main__": main()