def _coro(): futs = [] for connections in ctx.storage.connections.values(): for conn in connections: futs.append(conn.disconnect()) yield parallel(*futs)
def on_message(self, message): self.ctx.message(self.ctx._("\x02[Omegle] {id}:\x02 {message}").format(id=self.id, message=message)) k = (self.ctx.client.name, self.ctx.target) futs = [] for conn in self.ctx.storage.connections.get(k, set([])): if conn is self: continue futs.append(conn.send(message)) yield parallel(*futs)
def on_message(self, message): self.ctx.message( self.ctx._("\x02[Omegle] {id}:\x02 {message}").format( id=self.id, message=message)) k = (self.ctx.client.name, self.ctx.target) futs = [] for conn in self.ctx.storage.connections.get(k, set([])): if conn is self: continue futs.append(conn.send(message)) yield parallel(*futs)
def relay_irc(ctx, target, origin, message): if message[0] == ctx.config.ignore_prefix: return k = (ctx.client.name, ctx.target) futs = [] for conn in ctx.storage.connections.get(k, set([])): @coroutine def _coro(): yield conn.typing() yield conn.send(message) futs.append(_coro()) yield parallel(*futs)
def whois(self, nickname): """ If nickname is a list, performs multiple nicknames per WHOIS. Otherwise, does default WHOIS behavior. :param nicknames: Nickname(s) to lookup. :return: Future """ if isinstance(nickname, str): return super().whois(nickname) nicknames = set(filter(None, [nick.strip() for nick in nickname])) if not nicknames or any(protocol.ARGUMENT_SEPARATOR.search(nickname) is not None for nickname in nicknames): # IRCds don't like spaces in nicknames. Adapted from pydle.features.rfc1459 return None all_futures = set() # Store all relevant futures. drop_nicknames = [] # List of nicknames we'll delete after the pass. for nickname in nicknames: if nickname in self._pending['whois']: all_futures.add(self._pending['whois'][nickname]) drop_nicknames.append(nickname) continue future = Future() all_futures.add(future) self._pending['whois'][nickname] = future self._whois_info[nickname] = { 'oper': False, 'idle': 0, 'away': False, 'away_message': None, 'account': None, 'identified': False, } if nicknames: # It's possible we eliminated all nicknames due to already in-progress /WHOIS requests. But we're here, # so we didn't. # Send WHOIS self.rawmsg('WHOIS', ",".join(nicknames)) return parallel(*all_futures)
def disconnect(ctx): """ Disconnect from Omegle. Sever all Omegle connections. """ k = (ctx.client.name, ctx.target) if k not in ctx.storage.connections: ctx.respond(ctx._("I'm not connected to any Omegle users.")) return futs = [] for client in set(ctx.storage.connections[k]): futs.append(client.disconnect()) yield parallel(*futs) del ctx.storage.connections[k]