12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import os
- import logging
- from flask import Flask, g
- from ownchatbot.db import get_db
- from ownchatbot.owncast_com import live_now, award_points, send_system_chat
- from apscheduler.schedulers.background import BackgroundScheduler
- current_index = 0
- def create_app(test_config=None):
- app = Flask(__name__, instance_relative_config=True)
- try:
- os.makedirs(app.instance_path)
- except OSError:
- pass
- app.config.from_mapping(
- DATABASE=os.path.join(app.instance_path, 'ownchatbot.sqlite')
- )
- app.config.from_object('ownchatbot.defaults.config') # Read from config files
- app.config.from_pyfile('config.py', silent=True)
- app.config.from_object('ownchatbot.defaults.rewards')
- app.config.from_pyfile('rewards.py', silent=True)
- app.config.from_object('ownchatbot.defaults.categories')
- app.config.from_pyfile('categories.py', silent=True)
- app.config.from_object('ownchatbot.defaults.kofi')
- app.config.from_pyfile('kofi.py', silent=True)
- app.config.from_object('ownchatbot.defaults.announce')
- app.config.from_pyfile('announce.py', silent=True)
- if app.config['GUNICORN']: # Gunicorn logging integration
- gunicorn_logger = logging.getLogger('gunicorn.error')
- app.logger.handlers = gunicorn_logger.handlers
- app.logger.setLevel(gunicorn_logger.level)
- from . import webhooks # Set up blueprints
- from . import web_panels
- app.register_blueprint(webhooks.ocb)
- app.register_blueprint(web_panels.ocb)
- from . import db # Set up cli commands
- db.init_app(app)
- def announce():
- global current_index
- announcements = app.config['ANNOUNCEMENTS']
- message = announcements[current_index]
- send_system_chat(message)
- current_index = (current_index + 1) % len(announcements)
-
- def award_job():
- with app.app_context():
- if live_now(): # If stream is live
- award_points(get_db())
-
- def announce_job():
- with app.app_context():
- if app.config['ANNOUNCE_ENABLE']: # If announcements are enabled
- if live_now(): # If stream is live
- announce()
- else:
- app.logger.debug(f'Not live, so not sending announcement.')
- else:
- app.logger.debug(f'Announcements not enabled.')
- jorel_master_of_scheduling = BackgroundScheduler()
- points_seconds = app.config['POINTS_INTERVAL'] * 60
- announce_seconds = app.config['ANNOUNCE_INTERVAL'] * 60
- jorel_master_of_scheduling.add_job(award_job, 'interval', seconds=points_seconds)
- jorel_master_of_scheduling.add_job(announce_job, 'interval', seconds=announce_seconds)
- jorel_master_of_scheduling.start()
- return app
- if __name__ == '__main__':
- create_app()
|