コード例 #1
0
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: katheryn.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: schedule.py プロジェクト: IsmaelRLG/UserBot
 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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
 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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: katheryn.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: make_config.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: commands.py プロジェクト: IsmaelRLG/UserBot
 def __init__(self):
     self.modules = {}
     self.endless_process()
     self.lang = core.obtconfig('lang', cache=True)
コード例 #15
0
ファイル: commands.py プロジェクト: IsmaelRLG/UserBot
    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
ファイル: commands.py プロジェクト: IsmaelRLG/UserBot
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: