fix: irc plugin, remove login part and fix types
(biboumi handles login and everything)
This commit is contained in:
parent
fb079be08b
commit
8601dc82c5
1 changed files with 30 additions and 131 deletions
161
plugins/irc.py
161
plugins/irc.py
|
@ -46,17 +46,6 @@ section name, and the following options:
|
|||
.. glossary::
|
||||
:sorted:
|
||||
|
||||
|
||||
login_command
|
||||
**Default:** ``[empty]``
|
||||
|
||||
The command used to identify with the services (e.g. ``IDENTIFY mypassword``).
|
||||
|
||||
login_nick
|
||||
**Default:** ``[empty]``
|
||||
|
||||
The nickname to whom the auth command will be sent.
|
||||
|
||||
nickname
|
||||
**Default:** ``[empty]``
|
||||
|
||||
|
@ -77,14 +66,6 @@ Commands
|
|||
.. glossary::
|
||||
:sorted:
|
||||
|
||||
/irc_login
|
||||
**Usage:** ``/irc_login [server1] [server2]…``
|
||||
|
||||
Authenticate with the specified servers if they are correctly
|
||||
configured. If no servers are provided, the plugin will try
|
||||
them all. (You need to set :term:`login_nick` and
|
||||
:term:`login_command` as well)
|
||||
|
||||
/irc_join
|
||||
**Usage:** ``/irc_join <room or server>``
|
||||
|
||||
|
@ -131,6 +112,8 @@ Example configuration
|
|||
|
||||
import asyncio
|
||||
|
||||
from slixmpp.jid import JID, InvalidJID
|
||||
|
||||
from poezio.plugin import BasePlugin
|
||||
from poezio.decorators import command_args_parser
|
||||
from poezio.core.structs import Completion
|
||||
|
@ -144,19 +127,6 @@ class Plugin(BasePlugin):
|
|||
asyncio.create_task(
|
||||
self.initial_connect()
|
||||
)
|
||||
|
||||
self.api.add_command(
|
||||
'irc_login',
|
||||
self.command_irc_login,
|
||||
usage='[server] [server]…',
|
||||
help=('Connect to the specified servers if they '
|
||||
'exist in the configuration and the login '
|
||||
'options are set. If not is given, the '
|
||||
'plugin will try all the sections in the '
|
||||
'configuration.'),
|
||||
short='Login to irc servers with nickserv',
|
||||
completion=self.completion_irc_login)
|
||||
|
||||
self.api.add_command(
|
||||
'irc_join',
|
||||
self.command_irc_join,
|
||||
|
@ -200,8 +170,21 @@ class Plugin(BasePlugin):
|
|||
gateway = self.config.get('gateway', 'irc.poez.io')
|
||||
sections = self.config.sections()
|
||||
|
||||
for section in (s for s in sections if s != 'irc'):
|
||||
sections_jid = []
|
||||
for sect in sections:
|
||||
if sect == 'irc':
|
||||
continue
|
||||
try:
|
||||
sect_jid = JID(sect)
|
||||
if sect_jid != sect_jid.server:
|
||||
self.api.information(f'Invalid server: {sect}', 'Warning')
|
||||
continue
|
||||
except InvalidJID:
|
||||
self.api.information(f'Invalid server: {sect}', 'Warning')
|
||||
continue
|
||||
sections_jid.append(sect_jid)
|
||||
|
||||
for section in sections_jid:
|
||||
room_suffix = '%{}@{}'.format(section, gateway)
|
||||
|
||||
already_opened = False
|
||||
|
@ -210,101 +193,9 @@ class Plugin(BasePlugin):
|
|||
already_opened = True
|
||||
break
|
||||
|
||||
login_command = self.config.get_by_tabname(
|
||||
'login_command', section, default='')
|
||||
login_nick = self.config.get_by_tabname(
|
||||
'login_nick', section, default='')
|
||||
nick = self.config.get_by_tabname(
|
||||
'nickname', section, default='') or self.core.own_nick
|
||||
if login_command and login_nick:
|
||||
|
||||
def login(gw, sect, log_nick, log_cmd, room_suff):
|
||||
dest = '{}%{}'.format(log_nick, room_suff)
|
||||
self.core.xmpp.send_message(
|
||||
mto=dest, mbody=log_cmd, mtype='chat')
|
||||
delayed = self.api.create_delayed_event(
|
||||
5, self.join, gw, sect)
|
||||
self.api.add_timed_event(delayed)
|
||||
|
||||
if not already_opened:
|
||||
self.core.command.join(room_suffix + '/' + nick)
|
||||
delayed = self.api.create_delayed_event(
|
||||
5, login, gateway, section, login_nick, login_command,
|
||||
room_suffix[1:])
|
||||
self.api.add_timed_event(delayed)
|
||||
else:
|
||||
login(gateway, section, login_nick, login_command,
|
||||
room_suffix[1:])
|
||||
elif not already_opened:
|
||||
if not already_opened:
|
||||
await self.join(gateway, section)
|
||||
|
||||
@command_args_parser.quoted(0, -1)
|
||||
def command_irc_login(self, args):
|
||||
"""
|
||||
/irc_login [server] [server]…
|
||||
"""
|
||||
gateway = self.config.get('gateway', 'irc.poez.io')
|
||||
if args:
|
||||
not_present = []
|
||||
sections = self.config.sections()
|
||||
for section in args:
|
||||
if section not in sections:
|
||||
not_present.append(section)
|
||||
continue
|
||||
login_command = self.config.get_by_tabname(
|
||||
'login_command', section, default='')
|
||||
login_nick = self.config.get_by_tabname(
|
||||
'login_nick', section, default='')
|
||||
if not login_command and not login_nick:
|
||||
not_present.append(section)
|
||||
continue
|
||||
|
||||
room_suffix = '%{}@{}'.format(section, gateway)
|
||||
dest = '{}%{}'.format(login_nick, room_suffix[1:])
|
||||
self.core.xmpp.send_message(
|
||||
mto=dest, mbody=login_command, mtype='chat')
|
||||
if len(not_present) == 1:
|
||||
self.api.information(
|
||||
'Section %s does not exist or is not configured' %
|
||||
not_present[0], 'Warning')
|
||||
elif len(not_present) > 1:
|
||||
self.api.information(
|
||||
'Sections %s do not exist or are not configured' %
|
||||
', '.join(not_present), 'Warning')
|
||||
else:
|
||||
sections = self.config.sections()
|
||||
|
||||
for section in (s for s in sections if s != 'irc'):
|
||||
login_command = self.config.get_by_tabname(
|
||||
'login_command', section, default='')
|
||||
login_nick = self.config.get_by_tabname(
|
||||
'login_nick', section, default='')
|
||||
if not login_nick and not login_command:
|
||||
continue
|
||||
|
||||
room_suffix = '%{}@{}'.format(section, gateway)
|
||||
dest = '{}%{}'.format(login_nick, room_suffix[1:])
|
||||
self.core.xmpp.send_message(
|
||||
mto=dest, mbody=login_command, mtype='chat')
|
||||
|
||||
def completion_irc_login(self, the_input):
|
||||
"""
|
||||
completion for /irc_login
|
||||
"""
|
||||
args = the_input.text.split()
|
||||
if '' in args:
|
||||
args.remove('')
|
||||
pos = the_input.get_argument_position()
|
||||
sections = self.config.sections()
|
||||
if 'irc' in sections:
|
||||
sections.remove('irc')
|
||||
for section in args:
|
||||
try:
|
||||
sections.remove(section)
|
||||
except:
|
||||
pass
|
||||
return Completion(the_input.new_completion, sections, pos)
|
||||
|
||||
@command_args_parser.quoted(1, 1)
|
||||
async def command_irc_join(self, args):
|
||||
"""
|
||||
|
@ -315,9 +206,13 @@ class Plugin(BasePlugin):
|
|||
sections = self.config.sections()
|
||||
if 'irc' in sections:
|
||||
sections.remove('irc')
|
||||
if args[0] in sections and self.config.get_by_tabname(
|
||||
'rooms', args[0]):
|
||||
await self.join_server_rooms(args[0])
|
||||
if args[0] in sections:
|
||||
try:
|
||||
section_jid = JID(args[0])
|
||||
except InvalidJID:
|
||||
return
|
||||
self.config.get_by_tabname('rooms', section_jid)
|
||||
await self.join_server_rooms(section_jid)
|
||||
else:
|
||||
await self.join_room(args[0])
|
||||
|
||||
|
@ -343,7 +238,7 @@ class Plugin(BasePlugin):
|
|||
else:
|
||||
self.core.command.message('{}'.format(jid))
|
||||
|
||||
async def join_server_rooms(self, section):
|
||||
async def join_server_rooms(self, section: JID):
|
||||
"""
|
||||
Join all the rooms configured for a section
|
||||
(section = irc server)
|
||||
|
@ -368,9 +263,13 @@ class Plugin(BasePlugin):
|
|||
if not current_tab_info:
|
||||
return
|
||||
server, gateway = current_tab_info
|
||||
try:
|
||||
server_jid = JID(server)
|
||||
except InvalidJID:
|
||||
return
|
||||
|
||||
room = '{}%{}@{}'.format(name, server, gateway)
|
||||
if self.config.get_by_tabname('nickname', server):
|
||||
if self.config.get_by_tabname('nickname', server_jid):
|
||||
room += '/' + self.config.get_by_tabname('nickname', server)
|
||||
|
||||
await self.core.command.join(room)
|
||||
|
|
Loading…
Reference in a new issue