Пример #1
0
    def listconf(self):
        def __print__(string):
            print string

        pr = lambda x: __print__('|%-78s|' % ("    [%-10s]: [%s]" % tuple(x)))

        print '+' + ('=' * 78) + '+'
        pr([_('lenguaje', lang), i18n.LC_ALL[lang]])
        pr([_('prefijo', lang), core.obtconfig('prefix')])
        pr(['mps', core.obtconfig('mps')])
        pr(['plaintext', core.obtconfig('plaintext')])

        try:
            for server in core.obtconfig('ircbase'):
                pr(['server', server.name])
                pr([(' ' * 14) + "%-8s" % 'host', server.host])
                pr([(' ' * 14) + "%-8s" % 'port', server.port])
                pr([(' ' * 14) + "%-8s" % 'ssl', server.ssl])
                pr([(' ' * 14) + "%-8s" % 'passwd', server.passwd])
                pr([(' ' * 14) + "%-8s" % 'sasl', server.sasl])
                pr([(' ' * 14) + "%-8s" % 'nick', server.nick])
                pr([(' ' * 14) + "%-8s" % 'user', server.user])
                pr([(' ' * 14) + "%-8s" % 'auto', server.connect_to_beginning])

                #import sysb.katheryn as katheryn
                #pr([(' ' * 14) + "%-8s" % 'auto',
                #len(katheryn.tona(server.name).userlist())])
        except TypeError:
            pr(['server', _('no hay servidores agregados', lang)])
        print '+' + ('=' * 78) + '+'
Пример #2
0
    def __init__(self):
        lang = core.obtconfig('lang')
        if lang is None:
            core.addconfig('package_translate', 'db/userbot.json')
        else:
            global lang

        locale = i18n.turn('es',
                 core.obtconfig('package_translate', cache=True),
                 i18n.parsename(__name__))
        _ = locale.turn_tr_str

        def sn(string):
            string = unicode(string)
            raw = raw_input('%s %s ?>' % (string.decode('utf-8'), _('s/N', lang)))
            return raw.lower() in ['s', 'y']
        i = lambda x: raw_input(x + ' ?> ')

        global locale
        global _
        global sn
        global i

        if lang is None:
            self.lang()
            self.clear()

        vrn = core.obtconfig('VERSION', cache=True)
        vrn = (vrn[0] + ' ' + '.'.join(str(num) for num in vrn[1:]))

        print _('Bienvenido al sistema de configuracion de ', lang) + vrn
        print _('ingrese "help" o "license" para mas informacion', lang)

        while True:
            try:
                name = i('')
                if name is '':
                    continue

                for func in make_handlers:
                    if func.__name__ == name:
                        func(self)
                        raise GeneratorExit
                raise AttributeError
            except AttributeError:
                print _('orden "%s" desconocida', lang) % name
            except (KeyboardInterrupt, OSError, EOFError, GeneratorExit):
                pass
            except SystemExit:
                exit()
            except:
                for line in traceback.format_exc().splitlines():
                    print line
Пример #3
0
    def __init__(self, ircobject, name, extra=None):
        self.irc = ircobject
        self.name = name
        self.lang = core.obtconfig('lang', cache=True)
        self.__core__ = core.obtconfig(name + '_' + self.irc.base.name)
        if not self.__core__:
            self.__core__ = {}
            core.addconfig(name + '_' + self.irc.base.name, self.__core__)

        if isinstance(extra, dict):
            for name, item in extra.items():
                setattr(self, name, item)
Пример #4
0
 def __init__(self, db_name):
     self.db_name = db_name
     self.jobs = core.obtconfig(self.db_name)
     if not self.jobs:
         self.jobs = {}
         core.addconfig(db_name, self.jobs)
     self.start = False
Пример #5
0
    def mps(self):
        if not core.obtconfig('mps'):
            core.addconfig('mps', 0.4)

        r = float(i(_('mensajes por segundos', lang)))

        if r > 0:
            core.upconfig('mps', r)
Пример #6
0
    def addoper(self):
        opers = core.obtconfig('opers')
        if not opers:
            core.addconfig('opers', [])
            opers = []

        user = i(_('usuario', lang))
        print _('NOTA: La contraseña debe ser ingresada bajo sha256', lang)
        passwd = i(_('contraseña', lang))
        print _('niveles disponibles: ', lang) + 'global local noob'
        level = i(_('nivel', lang))
        if level is 'global':
            level = (level,)
        elif level in ('local', 'noob'):
            print _('ingrese el nombre del servidor para el operador', lang)

            ircbase = core.obtconfig('ircbase')
            if not ircbase:
                print _('no hay servidores agregados', lang)
                return

            name = i('')
            for server in ircbase:
                if name == server.name:
                    level = (level, server.name)
                    break

            if not isinstance(level, tuple):
                print _('el servidor no existe', lang)
                return

        kwargs = vars()
        del kwargs['self']
        del kwargs['opers']
        try:
            del kwargs['ircbase']
            del kwargs['name']
            del kwargs['server']
        except KeyError:
            pass

        opers.append(kwargs)
        core.upconfig('opers', opers)
Пример #7
0
 def prefix(self):
     prefix = core.obtconfig('prefix')
     if prefix:
         print _('el prefijo actual es: ', lang) + prefix
     r = i(_('prefijo', lang))[0]
     if r.isalpha():
         print _('prefijo invalido el caracter no debe ser alfabetico', lang)
     else:
         if not prefix:
             core.addconfig('prefix', r)
         else:
             core.upconfig('prefix', r)
Пример #8
0
    def delserver(self):
        ircbase = core.obtconfig('ircbase')
        if not ircbase:
            print _('no hay servidores agregados', lang)
            return

        print _('ingrese el nombre del servidor a eliminar.', lang)
        print _('servidores: ', lang) + ', '.join(sv.name for sv in ircbase)
        while True:
            name = i(':::')
            for server in ircbase:
                if name == server.name:
                    del ircbase[ircbase.index(server)]
                    core.upconfig('ircbase', ircbase)
                    return
            print _('el servidor no existe, vuelva a intentarlo', lang)
Пример #9
0
    def deloper(self):
        opers = core.obtconfig('opers')
        if not opers:
            return

        for oper in opers:
            print '=' * 80
            print _('usuario', lang) + ': ' + oper['user']
            print _('nivel', lang) + ': ' + oper['level'][0]

            try:
                print _('servidores: ', lang) + oper['level'][1]
            except IndexError:
                pass
            if sn(_('es este el operador a eliminar?', lang)):
                opers.remove(oper)
                core.upconfig('opers', opers)
            print '=' * 80
Пример #10
0
    def addserver(self):
        name = i(_('nombre de la red', lang))
        host = i(_('direccion del servidor', lang))
        port = int(i(_('numero de puerto', lang)))
        ssl = sn(_('usar ssl?', lang))
        if sn(_('usar contrasena?', lang)):
            passwd = (True, i(_('contraseña del servidor', lang)))
        else:
            passwd = (False,)

        nick = i(_('nombre para userbot', lang))
        user = i(_('nombre de usuario', lang))
        if sn(_('usar sasl?', lang)):
            sasl = (True,
                    (i(_('nombre de la cuenta', lang)),
                    i(_('contraseña', lang))))
        else:
            sasl = (False,)

        connect_to_beginning = sn(_('conectar al inicio?', lang))

        ircbase = core.obtconfig('ircbase')
        if not ircbase:
            core.addconfig('ircbase', [])
            ircbase = []

        for base in ircbase:
            if base.name.lower() is name.lower():
                print ((_('el nombre "%s" ya esta en uso,', lang) % name) +
                        _('por favor utilice otro nombre', lang))
                return

        kwargs = vars()
        del kwargs['self']
        del kwargs['ircbase']

        try:
            del kwargs['base']
        except KeyError:
            pass

        ircbase.append(IRCBase(**kwargs))
        core.upconfig('ircbase', ircbase)
Пример #11
0
    def lang(self):
        print _('Por favor ingrese su codigo de lenguaje:', 'en')
        num = 1
        print '+' + ('=' * 78) + '+'
        for langcode in locale._tr_aval():
            print '|%-78s|' % ('    [ %s ] %s: %s' %
            (num, langcode, i18n.LC_ALL[langcode].decode('utf-8')))
            num += 1
        print '+' + ('=' * 78) + '+'

        while True:
            lang = i('langcode').lower()
            if not lang in locale._tr_aval():
                print _('codigo de lenguaje invalido.', 'en')
                continue
            else:
                if core.obtconfig('lang'):
                    core.upconfig('lang', lang)
                else:
                    core.addconfig('lang', lang)
                print _('idioma actualizado', lang)
                global lang
                break
Пример #12
0
    def operid(self, name, passwd, rpl_whois):
        for oper in core.obtconfig('opers'):
            if oper['user'] == name and oper['passwd'] == util.hash(passwd):
                if isinstance(oper['level'], tuple):
                    lvl = oper['level'][0]
                    server = oper['level'][1]
                else:
                    lvl = oper['level']
                    server = self.irc.base.name

                ok = False

                if lvl in ('local', 'noob') and server == self.irc.base.name:
                    ok = True
                elif lvl == 'global':
                    ok = True

                if ok:
                    self[rpl_whois['is logged']]['status'] = lvl
                    return OPERATION_SUCCESSFULL
                else:
                    return OPERATION_FAILED
        return INVALID_PARAMETER
Пример #13
0
    def plaintext(self):
        if not isinstance(core.obtconfig('plaintext'), bool):
            core.addconfig('plaintext', False)

        if sn(_('guardar texto plano?', lang)):
            core.upconfig('plaintext', True)
Пример #14
0
 def __init__(self):
     self.modules = {}
     self.endless_process()
     self.lang = core.obtconfig('lang', cache=True)
Пример #15
0
    def endless_process(self):
        import time
        time.sleep(1)
        global_prefix = core.obtconfig('prefix', cache=True)
        time.sleep(1)
        global_lang = self.lang
        while True:
            irc, group = buffer_input.get()

            try:
                nickbot = irc.base.nick
                nick = group('nick')

                if nickbot.lower() in (nick.lower(), 'nickserv', 'chanserv'):
                    continue

                target = group('target')
                if target[0] in '#':
                    channel = target
                else:
                    channel = None

            except AttributeError:
                continue
            except IndexError:
                continue

            for mod, dict in self:
                if_break = False
                for handler in dict['handlers']:
                    try:
                        if not handler['no_prefix']:
                            prefix = ('^({}([:;, ] ?)|{})'.format(re.escape(nickbot),
                            re.escape(global_prefix)) if target != nickbot else '')
                        else:
                            prefix = ''

                        if target != nickbot:
                            if not re.match(prefix + '.*', group('message'), 2):
                                if_break = True
                                break

                        result = re.match(prefix +
                        handler['regex'], group('message'), 2)
                        if not result:
                            continue

                    except:
                        log.error('expresion regular invalida, handler %s' %
                        handler['func'].__name__)
                        for err in traceback.format_exc().splitlines():
                            log.error(err)
                        continue

                    if not channel and handler['chan_reqs']:
                        channel = result.group(handler['chan_reqs'])

                    if target == nickbot:
                        target = nick

                    rpl_whois = self.security(handler, irc, nick, channel)
                    if not rpl_whois:
                        if_break = False
                        break
                    else:
                        #print '%s %s %s %s' % (nick, target, channel, group('message'))
                        try:
                            handler['func'](irc, result.group, group, vars())
                        except:
                            for line in traceback.format_exc().splitlines():
                                irc.err(target, line)
                        finally:
                            if_break = True
                            break

                if if_break:
                    re.purge()
                    break
Пример #16
0
UserBot module
Copyright 2015, Ismael R. Lugo G.
"""

import re, os, imp, logg, types, Thread, traceback, i18n

from config import core
from config import conf
from irc.client import buffer_input
from irc.request import whois
from irc.connection import servers

log = logg.getLogger(__name__)
locale = i18n.turn(
    'es',
    core.obtconfig('package_translate', cache=True),
    'commands')
_ = locale.turn_tr_str


class commands(object):

    def __init__(self):
        self.modules = {}
        self.endless_process()
        self.lang = core.obtconfig('lang', cache=True)

    def __getitem__(self, key):
        try:
            return self.modules[key]
        except KeyError: