pgbot/pgbot

61 lines
1.6 KiB
Python
Executable file

#!/usr/bin/env python3
import asyncio
import os
import sys
import telethon
import yaml
import pgbotlib.dbstuff
import pgbotlib.commands
import pgbotlib.cron
import pgbotlib.misc
import pgbotlib.response
def init(args: list) -> tuple:
conf_dir = args[0] if args else '/etc/pgbot'
os.chdir(conf_dir)
try:
with open('pgbot.yml', 'r', encoding='utf-8') as data:
config = yaml.safe_load(data.read())
api_id = os.environ['API_ID']
api_hash = os.environ['API_HASH']
bot_token = os.environ['BOT_TOKEN']
db_spec = os.environ['DB_SPEC']
except (FileNotFoundError, KeyError) as err:
sys.exit(err)
client = telethon.TelegramClient('bot_session', api_id, api_hash)
client.start(bot_token=bot_token)
db_conn = pgbotlib.dbstuff.DBConn(db_spec)
return config, db_conn, client
def main():
config, db_conn, client = init(sys.argv[1:])
namegen = pgbotlib.misc.NameGenerator(config, db_conn)
responder = pgbotlib.response.Responder(config, client, db_conn, namegen)
commander = pgbotlib.commands.Commander(config, client, config['admins'],
db_conn, namegen, responder)
@client.on(telethon.events.NewMessage())
async def handle_new_message(event):
if event.message.text.startswith('.'):
await commander.action(event)
else:
await responder.respond(event)
cron = pgbotlib.cron.Cron(config, client, responder)
cron.plan()
loop = asyncio.get_event_loop()
loop.run_forever()
if __name__ == '__main__':
print("Starting pgbot...")
main()