def __init__(self, token, owner_id): # create folder for audio storage create_directory(self.FILES_DIRECTORY) self._mongo = MongoClientWrapper(MONGO) super(GatherValidateBot, self).__init__( token, [ # Handler for the chat actions pave_event_space()(per_chat_id_except([owner_id]), create_open, GatherValidateChatHandler, self._mongo, timeout=1000000), pave_event_space()(per_chat_id_in([owner_id]), create_open, OwnerHandler, self._mongo, timeout=1000000), # download voice file (self._is_voice, custom_thread(call(self._download_and_store)) ), # announce to all users (self._is_announce, custom_thread(call(self._announce))) ])
def __init__(self,token): self.adminconfig() self.timeconfig() x.loadConfig() config1.read('telebot.ini') idadmin = config1.get('admin','chatid') x.camStart() super(ChatBox, self).__init__(token, [ include_callback_query_chat_id(pave_event_space())(per_chat_id_in([int(idadmin)],types='private'), create_open, SmartRoomChat, timeout=90), pave_event_space()(per_chat_id_except([int(idadmin)],types='private'), create_open, NonAdmin, timeout=10), ])
def __init__(self, token, owner_id): self._owner_id = owner_id self._seen = set() self._store = UnreadStore() super(ChatBox, self).__init__(token, [ # Here is a delegate to specially handle owner commands. (per_chat_id_in([owner_id]), create_open(OwnerHandler, 20, self._store)), # Seed is always the same, meaning only one MessageSaver is ever spawned for entire application. (lambda msg: 1, create_open(MessageSaver, self._store, exclude=[owner_id])), # For senders never seen before, send him a welcome message. (self._is_newcomer, custom_thread(call(self._send_welcome))), ])
def __init__(self, token, owner_id): self._owner_id = owner_id self._seen = set() self._store = UnreadStore() super(ChatBox, self).__init__(token, [ # Here is a delegate to specially handle owner commands. pave_event_space()( per_chat_id_in([owner_id]), create_open, OwnerHandler, self._store, timeout=20), # Only one MessageSaver is ever spawned for entire application. (per_application(), create_open(MessageSaver, self._store, exclude=[owner_id])), # For senders never seen before, send him a welcome message. (self._is_newcomer, custom_thread(call(self._send_welcome))), ])
def main(): global bot, authorized_users, verbose, scheduler, owm, owm_api_key, city_list config_filename = 'weatherbot-config.json' try: with open(config_filename, 'r') as config_file: config = json.load(config_file) except FileNotFoundError: print('Error: config file "{}" not found: {}'.format(config_filename)) return except ValueError as e: print('Error: invalid config file "{}": {}'.format(config_filename, e)) return telegram_bot_token = config.get('telegram_bot_token') if not telegram_bot_token: print('Error: config file doesn’t contain a `telegram_bot_token`') return authorized_users = config.get('authorized_users') if type(authorized_users) is not list or len(authorized_users) == 0: print('Error: config file doesn’t contain an `authorized_users` list') return verbose = config.get('verbose', True) owm_api_key = config.get('openweathermap', {}).get('api_key') owm = OpenWeatherMap(owm_api_key) if owm_api_key else None city_list_filename = config.get('openweathermap', {}).get('city_list') city_list = CityList() if city_list_filename: city_list.read( city_list_filename, lambda p: print( '\rLoading city list ... {:d}%'.format(p), end='', flush=True)) print() bot = telepot.DelegatorBot(telegram_bot_token, [ include_callback_query_chat_id(pave_event_space())(per_chat_id_in( authorized_users, types='private'), create_open, ChatUser, timeout=3600) ]) scheduler.start() try: bot.message_loop(run_forever='Bot listening ...') except KeyboardInterrupt: pass if verbose: print('Exiting ...') scheduler.shutdown()
def __init__(self, config, on_idle_timeout=None): self.config = config if on_idle_timeout is not None: self.on_idle_timeout = on_idle_timeout else: self.on_idle_timeout = config.ON_IDLE_TIMEOUT super(TwitterBotDelegatorBot, self).__init__( config.TELEGRAM_BOT_TOKEN, [ # Here is a delegate to specially handle owner commands. delegate.pave_event_space()( delegate.per_chat_id_in(config.AUTHORIZED_USERS, types='private'), delegate.create_open, TwitterBotChatHandler, # Add handler arguments here config=config, timeout=self.on_idle_timeout) ])
def __init__(self, token): self._seen = set() self._store = MongoStore() super(ChatBox, self).__init__( token, [ # Here is a delegate to specially handle owner commands. pave_event_space()(per_chat_id_in(self._store.getUsers()), create_open, CommandsBrain, self._store, timeout=100), # Only one MessageSaver is ever spawned for entire application. (per_application(), create_open(MessageSaver, self._store, exclude=[])), # For senders never seen before, send him a welcome message. (self._is_newcomer, print('Welcome mate!')), ])
def main(): global bot, authorized_users, cameras, verbose, settings, \ scheduler, cronsched, \ encodings, path_to_ffmpeg, max_photo_size, \ snapshot_queue, snapshooter, copy_to, \ do_send_text, text_queue, max_text_file_size, \ do_send_documents, document_queue, \ do_send_videos, video_queue, video_processor, \ audio_on, audio_volume, voice_queue, voice_processor, upload_folder, \ do_send_photos, photo_queue, photo_processor config_filename = 'smarthomebot-config.json' shelf = shelve.open('.smarthomebot.shelf') if APPNAME in shelf.keys(): settings = easydict(shelf[APPNAME]) try: with open(config_filename, 'r') as config_file: config = json.load(config_file) except FileNotFoundError as e: print('Error: config file not found: {}'.format(e)) return except ValueError as e: print('Error: invalid config file "{}": {}'.format(config_filename, e)) return telegram_bot_token = config.get('telegram_bot_token') if not telegram_bot_token: print('Error: config file doesn\'t contain a `telegram_bot_token`') return authorized_users = config.get('authorized_users') if type(authorized_users) is not list or len(authorized_users) == 0: print('Error: config file doesn\'t contain an `authorized_users` list') return cameras = config.get('cameras') if type(cameras) is not dict: print('Error: config file doesn\'t define any `cameras`') return timeout_secs = config.get('timeout_secs', 10 * 60) upload_folder = config.get('image_folder', '/home/ftp-upload') event_handler = UploadDirectoryEventHandler(ignore_directories=True) observer = Observer() observer.schedule(event_handler, upload_folder, recursive=True) try: observer.start() except OSError as e: import pwd print( 'ERROR: Cannot start observer. Make sure the folder {:s} exists and is writable for {:s}.' .format(upload_folder, pwd.getpwuid(os.getuid()).pw_name)) return path_to_ffmpeg = config.get('path_to_ffmpeg') max_photo_size = config.get('max_photo_size', TELEGRAM_MAX_PHOTO_DIMENSION) verbose = config.get('verbose', False) do_send_photos = config.get('send_photos', False) do_send_videos = config.get('send_videos', True) do_send_text = config.get('send_text', False) copy_to = config.get('copy_to', None) if isinstance(copy_to, str): if not os.path.isdir(copy_to): print('Error: {:s} (`copy_to`) doesn\'t point to a directory.'. format(copy_to)) return if not os.access(copy_to, os.W_OK): print('Error: {:s} (`copy_to`) is not writable.'.format(copy_to)) return if verbose: print('All received surveillance files will be backed up to {:s}'. format(copy_to)) max_text_file_size = config.get('max_text_file_size', 10 * TELEGRAM_MAX_MESSAGE_SIZE) do_send_documents = config.get('send_documents', False) audio_on = config.get('audio', {}).get('enabled', False) audio_volume = config.get('audio', {}).get('volume', 1.0) bot = telepot.DelegatorBot(telegram_bot_token, [ include_callback_query_chat_id(pave_event_space())( per_chat_id_in(authorized_users, types='private'), create_open, ChatUser, timeout=timeout_secs) ]) snapshot_queue = queue.Queue() snapshooter = threading.Thread(target=take_snapshot_thread) snapshooter.start() if do_send_text: text_queue = queue.Queue() text_processor = threading.Thread(target=process_text_thread) text_processor.start() if verbose: print('Enabled text processing.') if do_send_documents: document_queue = queue.Queue() document_processor = threading.Thread(target=process_document_thread) document_processor.start() if verbose: print('Enabled document processing.') if do_send_photos: photo_queue = queue.Queue() photo_processor = threading.Thread(target=process_photo_thread) photo_processor.start() if verbose: print('Enabled photo processing.') if do_send_videos: video_queue = queue.Queue() video_processor = threading.Thread(target=process_video_thread) video_processor.start() if verbose: print('Enabled video processing.') if audio_on: try: pygame.mixer.pre_init(frequency=TELEGRAM_AUDIO_BITRATE, size=-16, channels=2, buffer=4096) pygame.mixer.init() except: print("\nWARNING: Cannot initialize audio.\n" "*** See above warnings for details.\n" "*** Consider deactivating audio in your \n" "*** SurveillanceBot config file.\n") audio_on = False else: voice_queue = queue.Queue() voice_processor = threading.Thread(target=process_voice_thread) voice_processor.start() if verbose: print('Enabled audio processing.') if verbose: print('Monitoring {} ...'.format(upload_folder)) scheduler.start() scheduler.add_job(garbage_collector, 'cron', hour=0) try: bot.message_loop( run_forever='Bot listening ... (Press Ctrl+C to exit.)') except KeyboardInterrupt: pass if verbose: print('Exiting ...') observer.stop() observer.join() shelf[APPNAME] = settings shelf.sync() shelf.close() scheduler.shutdown() snapshot_queue.put(None) snapshooter.join() if do_send_videos: video_queue.put(None) video_processor.join() if do_send_photos: photo_queue.put(None) photo_processor.join() if do_send_text: text_queue.put(None) text_processor.join() if do_send_documents: document_queue.put(None) document_processor.join() if audio_on: voice_queue.put(None) voice_processor.join()