2014-03-27 23:03:20 +00:00
|
|
|
|
"""
|
|
|
|
|
Plugin destined to be used together with the Biboumi IRC gateway.
|
|
|
|
|
|
|
|
|
|
For more information about Biboumi, please see the `official website`_.
|
|
|
|
|
|
|
|
|
|
This plugin is here as a non-default extension of the poezio configuration
|
|
|
|
|
made to work with IRC rooms and logins. Therefore, it does not define any
|
|
|
|
|
commands or do anything useful except on load.
|
|
|
|
|
|
|
|
|
|
Configuration
|
|
|
|
|
-------------
|
|
|
|
|
|
|
|
|
|
Global configuration
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
.. glossary::
|
|
|
|
|
:sorted:
|
|
|
|
|
|
|
|
|
|
gateway
|
|
|
|
|
**Default:** ``irc.poez.io``
|
|
|
|
|
|
|
|
|
|
The JID of the IRC gateway to use. If empty, irc.poez.io will be
|
|
|
|
|
used. Please try to run your own, though, it’s painless to setup.
|
|
|
|
|
|
|
|
|
|
.. note:: There is no nickname option because the default from poezio will be used.
|
|
|
|
|
|
|
|
|
|
Server-specific configuration
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Write a configuration section for each server, with the server address as the
|
|
|
|
|
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]``
|
|
|
|
|
|
|
|
|
|
Your nickname on this server. If empty, the default configuration will be used.
|
|
|
|
|
|
|
|
|
|
rooms
|
|
|
|
|
**Default:** ``[empty]``
|
|
|
|
|
|
|
|
|
|
The list of rooms to join on this server (e.g. ``#room1:#room2``).
|
|
|
|
|
|
|
|
|
|
.. note:: If no login_command or login_nick is set, the authentication phase
|
|
|
|
|
won’t take place and you will join the rooms after a small delay.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example configuration
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
.. code-block:: ini
|
|
|
|
|
|
|
|
|
|
[irc]
|
|
|
|
|
gateway = irc.poez.io
|
|
|
|
|
|
|
|
|
|
[irc.freenode.net]
|
|
|
|
|
nickname = mynick
|
|
|
|
|
login_nick = nickserv
|
|
|
|
|
login_command = identify mynick mypassword
|
|
|
|
|
rooms = #testroom1:#testroom2
|
|
|
|
|
|
|
|
|
|
[irc.geeknode.org]
|
|
|
|
|
nickname = anothernick
|
|
|
|
|
login_nick = C
|
|
|
|
|
login_command = nick identify mypassword
|
|
|
|
|
rooms = #testvroum
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _official website: http://biboumi.louiz.org/
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
from plugin import BasePlugin
|
|
|
|
|
|
|
|
|
|
class Plugin(BasePlugin):
|
|
|
|
|
def init(self):
|
|
|
|
|
|
|
|
|
|
def join(server):
|
|
|
|
|
"Join rooms after a small delay"
|
|
|
|
|
nick = self.config.get('nickname', '', server) or self.core.own_nick
|
|
|
|
|
rooms = self.config.get('rooms', '', server).split(':')
|
|
|
|
|
for room in rooms:
|
|
|
|
|
room = '{}%{}@{}/{}'.format(room, server, gateway, nick)
|
|
|
|
|
self.core.command_join(room)
|
|
|
|
|
|
|
|
|
|
gateway = self.config.get('gateway', 'irc.poez.io')
|
|
|
|
|
sections = self.config.sections()
|
|
|
|
|
|
|
|
|
|
for section in (s for s in sections if s != 'irc'):
|
2014-03-27 23:15:31 +00:00
|
|
|
|
server_suffix = '%{}@{}'.format(section, gateway)
|
2014-03-27 23:03:20 +00:00
|
|
|
|
|
|
|
|
|
already_opened = False
|
|
|
|
|
for tab in self.core.tabs:
|
|
|
|
|
if tab.name.endswith(server_suffix):
|
|
|
|
|
already_opened = True
|
|
|
|
|
|
|
|
|
|
login_command = self.config.get('login_command', '', section)
|
|
|
|
|
login_nick = self.config.get('login_nick', '', section)
|
|
|
|
|
nick = self.config.get('nickname', '', section) or self.core.own_nick
|
|
|
|
|
|
|
|
|
|
if login_command and login_nick:
|
|
|
|
|
dest = '{}{}/{}'.format(login_nick, server_suffix, nick)
|
|
|
|
|
self.core.xmpp.send_message(mto=dest, mbody=login_command, mtype='chat')
|
|
|
|
|
|
|
|
|
|
if not already_opened:
|
|
|
|
|
delayed = self.api.create_delayed_event(5, join, section)
|
|
|
|
|
self.api.add_timed_event(delayed)
|
|
|
|
|
|