def _join(self): """ The initial connect message to the room. The client sends this after the websocket handshake has been established. """ pat = '^[a-zA-Z0-9_]*$' if not string_util.is_valid_string(self.nick, pattern=pat): raise InvalidNickNameError('nick name may only contain a-zA-Z0-9_') else: rtc_version = TinychatApi.rtc_version(self.room) if rtc_version is None: rtc_version = config.FALLBACK_RTC_VERSION log.debug('failed to parse rtc version, using fallback: %s' % rtc_version) payload = { 'tc': 'join', 'req': self._req, 'useragent': 'tinychat-client-webrtc-undefined_win32-' + rtc_version, 'token': self._connect_args['token'], 'room': self.room, 'nick': self.nick } self.send(payload)
def login(self): """ Login to tinychat. :return: True if logged in, else False :rtype: bool """ if self.account is not None and self.password is not None: if not string_util.is_valid_string(self.account): raise InvalidAccountNameError( 'account name may only contain letter(a-z) and numbers(0-9)' ) else: account = Account(self.account, self.password, self.proxy) if not account.is_logged_in(): if account.login(): self.console.write('Logged in as `%s`' % self.account, Color.B_GREEN) else: self.console.write( 'Failed to login as `%s`' % self.account, Color.B_RED) return account.is_logged_in() return False
def connect(self): """ Connect to the websocket server. """ if not string_util.is_valid_string(self.room): raise InvalidRoomNameError( 'room name may only contain letters(a-z) and numbers(0-9).') else: tc_header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Encoding': 'gzip, deflate, br', 'Sec-WebSocket-Protocol': 'tc', 'Sec-WebSocket-Extensions': 'permessage-deflate' } websocket.enableTrace(config.DEBUG_MODE) self._connect_args = TinychatApi.connect_token(self.room) if self._connect_args is not None: self._ws = websocket.WebSocketApp( self._connect_args['endpoint'], header=tc_header, on_open=self.on_open, on_message=self.on_message, on_error=self.on_error, on_pong=self.on_pong) self._ws.run_forever(origin='https://tinychat.com', ping_interval=20, ping_timeout=5) else: log.info('missing connect args %s' % self._connect_args)
def _is_youtube_id(cls, yid): if string_util.is_valid_string(yid, pattern='^[a-zA-Z0-9_-]{11}$'): return True return False