Initial impromptu command

Add a command that invites people to a newly created room, with a random
localpart. The muc component is currently static. The interface
for the command might also change later on.

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2018-06-06 23:25:21 +01:00
parent c3e9130d7d
commit 0f344b899c
3 changed files with 57 additions and 0 deletions

View file

@ -763,6 +763,20 @@ class CommandCore:
self.core.invite(to.full, room, reason=reason)
self.core.information('Invited %s to %s' % (to.bare, room), 'Info')
@command_args_parser.quoted(1, 0)
def impromptu(self, args):
"""/impromptu <jid> [<jid> ...]"""
if args is None:
return self.help('impromptu')
jids = []
for jid in common.shell_split(' '.join(args)):
jids.append(safeJID(jid).bare)
self.core.impromptu(jids)
self.core.information('Invited %s to a random room' % (' '.join(jids)), 'Info')
@command_args_parser.quoted(1, 1, [''])
def decline(self, args):
"""/decline <room@server.tld> [reason]"""

View file

@ -289,6 +289,19 @@ class CompletionCore:
return Completion(
the_input.new_completion, rooms, n, '', quotify=True)
def impromptu(self, the_input):
"""Completion for /impromptu"""
n = the_input.get_argument_position(quoted=True)
onlines = []
offlines = []
for barejid in roster.jids():
if len(roster[barejid]):
onlines.append(barejid)
else:
offlines.append(barejid)
comp = sorted(onlines) + sorted(offlines)
return Completion(the_input.new_completion, comp, n, quotify=True)
def activity(self, the_input):
"""Completion for /activity"""
n = the_input.get_argument_position(quoted=True)

View file

@ -13,6 +13,7 @@ import pipes
import sys
import shutil
import time
import uuid
from collections import defaultdict
from typing import Callable, Dict, List, Optional, Tuple, Type
@ -868,6 +869,28 @@ class Core:
self.xmpp.plugin['xep_0030'].get_info(
jid=jid, timeout=5, callback=callback)
def impromptu(self, jids: List[JID]) -> None:
"""
Generates a new "Impromptu" room with a random localpart on the muc
component of the user who initiated the request. One the room is
created and the first user has joined, send invites for specified
contacts to join in.
"""
# Use config.default_muc as muc component if available, otherwise
# find muc component by disco#items-ing the user domain. If not, give
# up
default_muc = 'chat.cluxia.eu'
nick = self.own_nick
room = uuid.uuid4().hex + '@' + default_muc
self.open_new_room(room, nick).join()
self.information('Room %s created' % room, 'Info')
for jid in jids:
self.invite(jid, room)
def get_error_message(self, stanza, deprecated: bool = False):
"""
Takes a stanza of the form <message type='error'><error/></message>
@ -1788,6 +1811,13 @@ class Core:
desc='Invite jid in room with reason.',
shortdesc='Invite someone in a room.',
completion=self.completion.invite)
self.register_command(
'impromptu',
self.command.impromptu,
usage='<jid> [<jid> ...]',
desc='Invite people into an impromptu room',
shortdesc='Invite someone in a room.',
completion=self.completion.impromptu)
self.register_command(
'invitations',
self.command.invitations,