%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/beacons/ |
Current File : //usr/lib/python2.7/site-packages/salt/beacons/telegram_bot_msg.py |
# -*- coding: utf-8 -*- ''' Beacon to emit Telegram messages Requires the python-telegram-bot library ''' # Import Python libs from __future__ import absolute_import, unicode_literals import logging from salt.ext.six.moves import map # Import 3rd Party libs try: import telegram logging.getLogger('telegram').setLevel(logging.CRITICAL) HAS_TELEGRAM = True except ImportError: HAS_TELEGRAM = False log = logging.getLogger(__name__) __virtualname__ = 'telegram_bot_msg' def __virtual__(): if HAS_TELEGRAM: return __virtualname__ else: return False def validate(config): ''' Validate the beacon configuration ''' if not isinstance(config, list): return False, ('Configuration for telegram_bot_msg ' 'beacon must be a list.') _config = {} list(map(_config.update, config)) if not all(_config.get(required_config) for required_config in ['token', 'accept_from']): return False, ('Not all required configuration for ' 'telegram_bot_msg are set.') if not isinstance(_config.get('accept_from'), list): return False, ('Configuration for telegram_bot_msg, ' 'accept_from must be a list of usernames.') return True, 'Valid beacon configuration.' def beacon(config): ''' Emit a dict with a key "msgs" whose value is a list of messages sent to the configured bot by one of the allowed usernames. .. code-block:: yaml beacons: telegram_bot_msg: - token: "<bot access token>" - accept_from: - "<valid username>" - interval: 10 ''' _config = {} list(map(_config.update, config)) log.debug('telegram_bot_msg beacon starting') ret = [] output = {} output['msgs'] = [] bot = telegram.Bot(_config['token']) updates = bot.get_updates(limit=100, timeout=0, network_delay=10) log.debug('Num updates: %d', len(updates)) if not updates: log.debug('Telegram Bot beacon has no new messages') return ret latest_update_id = 0 for update in updates: message = update.message if update.update_id > latest_update_id: latest_update_id = update.update_id if message.chat.username in _config['accept_from']: output['msgs'].append(message.to_dict()) # mark in the server that previous messages are processed bot.get_updates(offset=latest_update_id + 1) log.debug('Emitting %d messages.', len(output['msgs'])) if output['msgs']: ret.append(output) return ret