Praxis_Bot/standalone_channelrewards.py
2021-04-26 14:47:15 -04:00

79 lines
3.0 KiB
Python

import flask
from flask import request
import channel_rewards.channelRewards_loader as rewards_loader
from channel_rewards.channelRewards_base import AbstractChannelRewards
api = flask.Flask(__name__)
# enable/disable this to get web pages of crashes returned
api.config["DEBUG"] = True
loadedRewards = {}
def init():
# todo load entire reward library and cache it here
load_rewards()
def load_rewards():
global loadedRewards
loadedRewards[AbstractChannelRewards.ChannelRewardsType.channelPoints] = rewards_loader.load_rewards(AbstractChannelRewards.ChannelRewardsType.channelPoints)
loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_bits] = rewards_loader.load_rewards(AbstractChannelRewards.ChannelRewardsType.twitch_bits)
loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_subs] = rewards_loader.load_rewards(AbstractChannelRewards.ChannelRewardsType.twitch_subs)
def is_reward(reward_name: str, reward_type: str) -> bool:
#print(reward)
for reward in loadedRewards[reward_type]:
#print(reward)
if reward_name == reward:
return True
if reward_name == "!echo":
return True
else:
return False
def handle_reward(source, username, reward_name, reward_type, rest, bonusData):
#reward:AbstractChannelRewards = loadedRewards[reward_name]
reward:AbstractChannelRewards = loadedRewards[reward_type][reward_name]
if reward is not None:
reward_response = reward.do_ChannelReward(source, username, reward_name, rest, bonusData)
return flask.make_response("{\"message\":\"%s\"}" % reward_response, 200, {"Content-Type": "application/json"})
#print("Doing a reward")
@api.route('/api/v1/reward', methods=['GET'])
def reward_check():
if 'reward_name' in request.args and 'reward_type' in request.args:
if is_reward(request.args['reward_name'], request.args['reward_type']):
return flask.make_response('', 200)
else:
return flask.make_response('', 404)
@api.route('/api/v1/exec', methods=['GET'])
def exec_reward():
if 'reward_name' not in request.args:
return flask.make_response('{\"text\":"Argument \'reward_name\' not in request"}', 400)
if 'reward_type' not in request.args:
return flask.make_response('{\"text\":"Argument \'reward_name\' not in request"}', 400)
if 'rest' not in request.args:
return flask.make_response('{\"text\":"Argument \'rest\' not in request"}', 400)
if 'reward_source' not in request.args:
return flask.make_response('{\"text\":"Argument \'reward_source\' not in request"}', 400)
if 'user_name' not in request.args:
username = "User"
else:
username = request.args['user_name']
return handle_reward(request.args['reward_source'], username, request.args['reward_name'], request.args['reward_type'], request.args['rest'], request.args['bonus_data'])
if __name__ == '__main__':
init()
api.run(host='0.0.0.0', port=6969)