Beispiel #1
0
class ApprovePayment:
    def __init__(self, bot, update, user_data):
        self.bot = bot
        self.update = update
        self.user_data = user_data
        self.bot_constants = BotConstants()
        self.bot_variables = BotVariables()
        self.query = self.update.callback_query
        self.chosen_option = self.query.data
        self.chat_id = self.query.message.chat_id
        self.message_id = self.query.message.message_id
        self.telegram_username = self.query.message.chat.username
        self.strava_telegram_webhooks_resource = StravaTelegramWebhooksResource(
        )
        self.approve_payment_config = {
            "bot": {},
            "challenges": {
                "cadence90": {
                    "odd": {
                        "column_name": "odd_challenges"
                    },
                    "even": {
                        "column_name": "even_challenges"
                    }
                }
            }
        }

    def process(self):
        approved_payment_details = (self.chosen_option.split("pa_",
                                                             1)[1]).split("_")
        category = approved_payment_details[0]
        company = approved_payment_details[1]
        month = approved_payment_details[2]
        athlete_id = approved_payment_details[3]
        if self.strava_telegram_webhooks_resource.approve_payment_for_challenge(
                self.approve_payment_config[category][company][month]
            ['column_name'], athlete_id):
            message = "Approved payment for [{athlete_id}](https://www.strava.com/athletes/{athlete_id}).".format(
                athlete_id=athlete_id)
            self.strava_telegram_webhooks_resource.update_challenges_stats(
                athlete_id)
        else:
            message = "Failed to approve payment for [{athlete_id}](https://www.strava.com/athletes/{athlete_id}).".format(
                athlete_id=athlete_id)
        logging.info(message)
        self.bot.edit_message_text(text=message,
                                   chat_id=self.chat_id,
                                   message_id=self.message_id,
                                   parse_mode='Markdown')
Beispiel #2
0
class HandleCommandArgs:
    def __init__(self, bot, update, args):
        self.bot = bot
        self.update = update
        self.args = args
        self.bot_constants = BotConstants()
        self.bot_variables = BotVariables()
        self.strava_telegram_webhooks_resource = StravaTelegramWebhooksResource(
        )

    def default(self):
        pass

    def token_command(self):
        if len(self.args) == 1:
            athlete_id = self.args[0]
            athlete_details = self.strava_telegram_webhooks_resource.get_athlete(
                athlete_id)
            if athlete_details:
                athlete_token = athlete_details['athlete_token']
                message = "Token for {athlete_id}: `{athlete_token}`".format(
                    athlete_id=athlete_id, athlete_token=athlete_token)
            else:
                message = "Athlete ID {athlete_id} not found.".format(
                    athlete_id=athlete_id)
            self.update.message.reply_text(message,
                                           parse_mode="Markdown",
                                           disable_web_page_preview=True)
            self.strava_telegram_webhooks_resource.send_message(message)
        else:
            logging.warning("More than 1 arguments passed for /token. Args %s",
                            self.args)

    def activate_athlete_command(self):
        if len(self.args) == 1:
            athlete_id = self.args[0]
            if self.strava_telegram_webhooks_resource.activate_flag_athlete(
                    athlete_id=athlete_id):
                message = "Successfully activated {athlete_id}.".format(
                    athlete_id=athlete_id)
            else:
                message = "Failed to activate {athlete_id}.".format(
                    athlete_id=athlete_id)
            self.update.message.reply_text(message,
                                           parse_mode="Markdown",
                                           disable_web_page_preview=True)
            self.strava_telegram_webhooks_resource.send_message(message)
        else:
            logging.warning(
                "More than 1 arguments passed for /activate. Args %s",
                self.args)

    def deactivate_athlete_command(self):
        if len(self.args) == 1:
            athlete_id = self.args[0]
            if self.strava_telegram_webhooks_resource.deactivate_flag_athlete(
                    athlete_id=athlete_id):
                message = "Successfully deactivated {athlete_id}.".format(
                    athlete_id=athlete_id)
            else:
                message = "Failed to deactivate {athlete_id}.".format(
                    athlete_id=athlete_id)
            self.update.message.reply_text(message,
                                           parse_mode="Markdown",
                                           disable_web_page_preview=True)
            self.strava_telegram_webhooks_resource.send_message(message)
        else:
            logging.warning(
                "More than 1 arguments passed for /deactivate. Args %s",
                self.args)

    def update_stats_command(self):
        if len(self.args) == 1:
            athlete_id = self.args[0]
            if self.strava_telegram_webhooks_resource.update_stats(athlete_id):
                message = "Updating stats for {}..".format(athlete_id)
            else:
                message = "Failed to trigger update stats for {}".format(
                    athlete_id)
            self.update.message.reply_text(message,
                                           parse_mode="Markdown",
                                           disable_web_page_preview=True)
            self.strava_telegram_webhooks_resource.send_message(message)
        else:
            logging.warning(
                "More than 1 arguments passed for /deactivate. Args %s",
                self.args)

    def challenges_refresh_stats_command(self):
        if len(self.args) == 1:
            athlete_id = self.args[0]
            message = self.bot_constants.MESSAGE_UPDATE_STATS_CHALLENGES_FAILED
            if self.strava_telegram_webhooks_resource.update_challenges_stats(
                    athlete_id):
                message = self.bot_constants.MESSAGE_UPDATE_STATS_CHALLENGES_SUCCESS
            self.update.message.reply_text(message,
                                           parse_mode="Markdown",
                                           disable_web_page_preview=True)
            self.strava_telegram_webhooks_resource.send_message(message)
        else:
            logging.warning(
                "More than 1 arguments passed for /deactivate. Args %s",
                self.args)

    def challenges_deauth_command(self):
        if len(self.args) == 1:
            athlete_id = self.args[0]
            if self.strava_telegram_webhooks_resource.challenges_deauth_athlete(
                    athlete_id):
                message = "Successfully deauthorised {athlete_id} from challenges".format(
                    athlete_id=athlete_id)
            else:
                message = "Failed to deauthorise {athlete_id} from challenges".format(
                    athlete_id=athlete_id)
            self.update.message.reply_text(message,
                                           parse_mode="Markdown",
                                           disable_web_page_preview=True)
            self.strava_telegram_webhooks_resource.send_message(message)
        else:
            logging.warning(
                "More than 1 arguments passed for /deactivate. Args %s",
                self.args)

    def process(self):
        command = self.update.message.text.split(' ', 1)[0]

        options = defaultdict(
            lambda: self.default, {
                '/token': self.token_command,
                '/activate': self.activate_athlete_command,
                '/deactivate': self.deactivate_athlete_command,
                '/update': self.update_stats_command,
                '/challenges_refresh_stats':
                self.challenges_refresh_stats_command,
                '/challenges_deauth': self.challenges_deauth_command
            })

        options[command]()