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:
parent
c3e9130d7d
commit
0f344b899c
3 changed files with 57 additions and 0 deletions
|
@ -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]"""
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue