def __init__(self, context=None, prompt_name='vexbot', publish_address=None, subscribe_address=None, **kwargs): super().__init__() self.messaging = ZmqMessaging('shell', publish_address, subscribe_address, 'shell') self.command_manager = CommandManager(self.messaging) # FIXME self.command_manager._commands.pop('commands') self.stdout.write('Vexbot {}\n'.format(__version__)) if kwargs.get('already_running', False): self.stdout.write('vexbot already running\n') self.stdout.write("Type \"help\" for command line help or " "\"commands\" for bot commands\n\n") self.command_manager.register_command('start_vexbot', _start_vexbot) self.messaging.start_messaging() self.prompt = prompt_name + ': ' self.misc_header = "Commands" self._exit_loop = False self._set_readline_helper(kwargs.get('history_file'))
def __init__(self, streamer_name, namespace, website_url, publish_address, subscribe_address, service_name): self.log = logging.getLogger(__name__) self.log.setLevel(0) if not _WEBSOCKET_INSTALLED: self.log.error('Must install `websocket`') if not _REQUESTS_INSTALLED: self.log.error('Must install `requests') self.messaging = ZmqMessaging(service_name, publish_address, subscribe_address, service_name) self.messaging.start_messaging() self._streamer_name = streamer_name self.namespace = namespace self._website_url = website_url self.log.info('Getting Socket IO key!') self.key, heartbeat = self._connect_to_server_helper() self.log.info('Socket IO key got!') self.command_manager = AdapterCommandManager(self.messaging) self._thread = Thread(target=self.handle_subscription) self._thread.daemon = True self._thread.start() # alters URL to be more websocket...ie self._website_socket = self._website_url.replace('http', 'ws') self._website_socket += 'websocket/' self.nick = None super().__init__(self._website_socket + self.key, on_open=self.on_open, on_close=self.on_close, on_message=self.on_message, on_error=self.on_error)
def main(nick, password, host, channel, publish_address, subscribe_address, service_name): if not _IRC3_INSTALLED: logging.error('irc requires `irc3` to be installed. Please install ' 'using `pip install irc3`') irc_client = create_irc_bot(nick, password, host, channel=channel) try: messaging = ZmqMessaging(service_name, publish_address, subscribe_address, socket_filter=service_name) messaging.start_messaging() except ZMQError: return # Duck type messaging onto irc_client, FTW irc_client.messaging = messaging command_parser = AdapterCommandManager(messaging) irc_client.command_parser = command_parser """ command_parser.register_command('server config', _default) command_parser.register_command('ip', _default) command_parser.register_command('join', _default) command_parser.register_command('kick', _default) command_parser.register_command('part', _default) command_parser.register_command('invite', _default) command_parser.register_command('topic', _default) command_parser.register_command('away', _default) """ irc_client.create_connection() irc_client.add_signal_handlers() event_loop = asyncio.get_event_loop() asyncio.ensure_future(_check_subscription(irc_client)) atexit.register(_send_disconnected(messaging)) handle_close = _handle_close(messaging, event_loop) signal.signal(signal.SIGINT, handle_close) signal.signal(signal.SIGTERM, handle_close) try: event_loop.run_forever() except KeyboardInterrupt: pass event_loop.close() sys.exit()
def main(client_secret_filepath, publish_address, subscribe_address): if not _GOOGLE_API_INSTALLED: logging.error( '`google-api-python-client` required to use youtube. Install using `pip install google-api-python-client' ) return # TODO: Determine if this try/except pattern has become outdated # with new `connect` methods being called rather than the old bind try: messaging = ZmqMessaging('youtube', publish_address, subscribe_address, 'youtube') messaging.start_messaging() except ZMQError: return # signal.signal(signal.SIGINT, handle_close) # signal.signal(signal.SIGTERM, handle_close) # handle_close = _handle_close(messaging) scope = [ 'https://www.googleapis.com/auth/youtube', 'https://www.googleapis.com/auth/youtube.force-ssl', 'https://www.googleapis.com/auth/youtube.readonly' ] youtube_api = _youtube_authentication(client_secret_filepath, scope) parts = 'snippet' livestream_response = youtube_api.liveBroadcasts().list( mine=True, part=parts, maxResults=1).execute() live_chat_id = livestream_response.get('items')[0]['snippet']['liveChatId'] livechat_response = youtube_api.liveChatMessages().list( liveChatId=live_chat_id, part='snippet').execute() next_token = livechat_response.get('nextPageToken') polling_interval = livechat_response.get('pollingIntervalMillis') polling_interval = _convert_to_seconds(polling_interval) messaging.send_status('CONNECTED') event_loop = asyncio.get_event_loop() asyncio.ensure_future( _recv_loop(messaging, youtube_api, live_chat_id, next_token, polling_interval)) asyncio.ensure_future( _run(messaging, youtube_api.liveChatMessages(), live_chat_id)) atexit.register(_send_disconnect(messaging)) event_loop.run_forever() messaging.send_status('DISCONNECTED')
def __init__(self, url=None, comment_element_id=None, author_class_name=None, message_class_name=None, publish_address='', subscribe_address='', service_name=''): """ `comment_element_id` is the css element where all the comments are, i.e., 'all-comments' for youtube `author_class_name` is the css class which holds the comment author username i.e., 'yt-user-name' for youtube `message_class_name` is the css class which holds the comment test ie., 'comment-text' for youtube """ self.messaging = ZmqMessaging(service_name, publish_address, subscribe_address, 'javascriptwebscraper') self.messaging.start_messaging() self.log = logging.getLogger(__name__) self.log.setLevel(logging.NOTSET) self.url = url self._number_of_messages = 0 self.comment_element_id = comment_element_id self.author_class_name = author_class_name self.message_class_name = message_class_name self._driver = None self._kill = False signal.signal(signal.SIGINT, self._exit_gracefully) signal.signal(signal.SIGTERM, self._exit_gracefully)
def __init__(self, jid, password, room, publish_address, subscribe_address, service_name, bot_nick='EchoBot', **kwargs): # Initialize the parent class if not _SLEEKXMPP_INSTALLED: logging.error('must install sleekxmpp') super().__init__(jid, password) self.messaging = ZmqMessaging(service_name, publish_address, subscribe_address, service_name) self.messaging.start_messaging() self.command_manager = AdapterCommandManager(self.messaging) self.room = room self.nick = bot_nick self.log = logging.getLogger(__file__) # One-shot helper method used to register all the plugins self._register_plugin_helper() self.add_event_handler("session_start", self.start) self.add_event_handler("groupchat_message", self.muc_message) self.add_event_handler('connected', self._connected) self.add_event_handler('disconnected', self._disconnected) self._thread = Thread(target=self.run) self._thread.daemon = True self._thread.start()