Esempio n. 1
0
File: bot.py Progetto: Felfa/ifarres
    def on_message_receive(self, msg):
        try:
            triggered = False

            if msg.content == None:
                return

            step = get_step(self, msg.conversation.id)

            if step:
                for plugin in self.plugins:
                    if get_plugin_name(plugin) == step['plugin'] and hasattr(
                            plugin, 'steps'):
                        if msg.content.startswith('/next'):
                            plugin.steps(msg, -1)
                            cancel_steps(self, msg.conversation.id)

                        if msg.content.startswith('/done'):
                            plugin.steps(msg, 0)
                            cancel_steps(self, msg.conversation.id)

                        else:
                            plugin.steps(msg, step['step'])

            else:
                for plugin in self.plugins:
                    # Always do this action for every message. #
                    if hasattr(plugin, 'always'):
                        plugin.always(msg)

                    # If no query show help #
                    if msg.type == 'inline_query':
                        if msg.content == '':
                            msg.content = '/help'

                    # Check if any command of a plugin matches. #
                    for command in plugin.commands:
                        if 'command' in command:
                            if self.check_trigger(command['command'], msg,
                                                  plugin):
                                break

                        if 'friendly' in command:
                            if self.check_trigger(command['friendly'], msg,
                                                  plugin):
                                break

                        if 'shortcut' in command:
                            if len(command['shortcut']) < 3:
                                shortcut = command['shortcut'] + ' '
                            else:
                                shortcut = command['shortcut']

                            if self.check_trigger(shortcut, msg, plugin):
                                break

        except Exception as e:
            logging.exception(traceback.format_exc())
            self.send_alert(traceback.format_exc())
Esempio n. 2
0
    def steps(self, m, step):
        if step == -1:
            self.bot.send_message(m, 'ok... :c', extra={'format': 'HTML'})
            cancel_steps(self.bot, m.conversation.id)
        if step == 0:
            self.bot.send_message(m, 'fine!', extra={'format': 'HTML'})
            cancel_steps(self.bot, m.conversation.id)

        elif step == 1:
            self.bot.send_message(m,
                                  'ok, now send me your nudes or /cancel',
                                  extra={'format': 'HTML'})
            set_step(self.bot, m.conversation.id, get_plugin_name(self), 2)

        elif step == 2:
            self.bot.send_message(m, '( ͡° ͜ʖ ͡°)', extra={'format': 'HTML'})
            cancel_steps(self.bot, m.conversation.id)
Esempio n. 3
0
    def on_message_receive(self, msg):
        try:
            ignore_message = False
            if msg.content == None or (msg.type != 'inline_query'
                                       and msg.date < time() - 60 * 5):
                return

            # if msg.sender.id != self.config['owner'] and not is_trusted(self, msg.sender.id, msg) and (has_tag(self, msg.conversation.id, 'spam') or has_tag(self, msg.sender.id, 'spam')):
            #     ignore_message = True
            #     self.send_message(msg, self.trans.errors.spammer_detected, extra={'format': 'HTML'})

            if msg.sender.id != self.config['owner'] and not is_trusted(
                    self, msg.sender.id,
                    msg) and (has_tag(self, msg.conversation.id, 'muted')
                              or has_tag(self, msg.sender.id, 'muted')):
                ignore_message = True

            step = get_step(self, msg.conversation.id)

            if step:
                if not ignore_message:
                    for plugin in self.plugins:
                        if get_plugin_name(plugin) == step.plugin and hasattr(
                                plugin, 'steps'):
                            if msg.content.startswith('/cancel'):
                                plugin.steps(msg, -1)
                                cancel_steps(self, msg.conversation.id)

                            if msg.content.startswith('/done'):
                                plugin.steps(msg, 0)
                                cancel_steps(self, msg.conversation.id)

                            else:
                                plugin.steps(msg, step['step'])

            else:
                for plugin in self.plugins:
                    # Always do this action for every message. #
                    if hasattr(plugin, 'always'):
                        plugin.always(msg)

                    # If no query show help #
                    if msg.type == 'inline_query' and not ignore_message:
                        if msg.content == '':
                            msg.content = 'help'

                    if hasattr(plugin, 'commands') and not ignore_message:
                        # Check if any command of a plugin matches. #
                        for command in plugin.commands:
                            if 'parameters' not in command:
                                command['parameters'] = None

                            if 'command' in command:
                                if self.check_trigger(command['command'],
                                                      command['parameters'],
                                                      msg, plugin):
                                    break
                                if 'keep_default' in command and command[
                                        'keep_default']:
                                    if self.check_trigger(
                                            command['command'],
                                            command['parameters'], msg, plugin,
                                            False, True):
                                        break

                            if 'friendly' in command and not has_tag(
                                    self, msg.sender.id, 'noreplies'
                            ) and not has_tag(
                                    self, msg.conversation.id, 'noreplies'
                            ) and msg.conversation.id != self.config.alerts_conversation_id and msg.conversation.id != self.config.admin_conversation_id:
                                if self.check_trigger(command['friendly'],
                                                      command['parameters'],
                                                      msg, plugin, True):
                                    break

                            if 'shortcut' in command:
                                if self.check_trigger(command['shortcut'],
                                                      command['parameters'],
                                                      msg, plugin):
                                    break
                                if 'keep_default' in command and command[
                                        'keep_default']:
                                    if self.check_trigger(
                                            command['shortcut'],
                                            command['parameters'], msg, plugin,
                                            False, True):
                                        break

        except KeyboardInterrupt:
            pass

        except Exception as e:
            catch_exception(e, self)
Esempio n. 4
0
    def steps(self, m, step):
        gid = str(m.conversation.id)

        if step == -1:
            self.bot.send_message(
                m,
                self.bot.trans.plugins.administration.strings.cancel %
                m.conversation.title,
                extra={'format': 'HTML'})
            cancel_steps(self.bot, m.conversation.id)

        if step == 0:
            self.bot.send_message(
                m,
                self.bot.trans.plugins.administration.strings.done %
                m.conversation.title,
                extra={'format': 'HTML'})
            cancel_steps(self.bot, m.conversation.id)

        elif step == 1:
            if self.bot.trans.plugins.administration.strings.yes.lower(
            ) in m.content.lower():
                set_step(self.bot, m.conversation.id, get_plugin_name(self), 2)
                if not m.content.startswith(
                        '/cancel') and not m.content.startswith('/done'):
                    self.bot.send_message(
                        m,
                        self.bot.trans.plugins.administration.strings.ask_link
                        % m.conversation.title,
                        extra={
                            'format': 'HTML',
                            'force_reply': True
                        })

            else:
                cancel_steps(self.bot, m.conversation.id)
                self.bot.send_message(m,
                                      self.bot.trans.errors.unknown,
                                      extra={'format': 'HTML'})

        elif step == 2:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), 3)
            if not m.content.startswith(
                    '/cancel') and not m.content.startswith('/done'):
                self.bot.administration[gid].link = m.content
                set_data('administration/%s/%s/link' % (self.bot.name, gid),
                         self.bot.administration[gid].link)
                self.bot.send_message(
                    m,
                    self.bot.trans.plugins.administration.strings.ask_alias %
                    m.conversation.title,
                    extra={
                        'format': 'HTML',
                        'force_reply': True
                    })

        elif step == 3:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), 4)
            if not m.content.startswith(
                    '/cancel') and not m.content.startswith('/done'):
                self.bot.administration[gid].alias = m.content.lower()
                set_data('administration/%s/%s/alias' % (self.bot.name, gid),
                         self.bot.administration[gid].alias)
                self.bot.send_message(
                    m,
                    self.bot.trans.plugins.administration.strings.ask_rules %
                    m.conversation.title,
                    extra={
                        'format': 'HTML',
                        'force_reply': True
                    })

        elif step == 4:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), 5)
            if not m.content.startswith(
                    '/cancel') and not m.content.startswith('/done'):
                self.bot.administration[gid].rules = m.content.split('\n')
                set_data('administration/%s/%s/rules' % (self.bot.name, gid),
                         self.bot.administration[gid].rules)
                self.bot.send_message(
                    m,
                    self.bot.trans.plugins.administration.strings.ask_motd %
                    m.conversation.title,
                    extra={
                        'format': 'HTML',
                        'force_reply': True
                    })

        elif step == 5:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), 6)
            if not m.content.startswith(
                    '/cancel') and not m.content.startswith('/done'):
                self.bot.administration[gid].motd = m.content
                set_data('administration/%s/%s/motd' % (self.bot.name, gid),
                         self.bot.administration[gid].motd)
                self.bot.send_message(
                    m,
                    self.bot.trans.plugins.administration.strings.ask_public %
                    m.conversation.title,
                    extra={
                        'format': 'HTML',
                        'force_reply': True
                    })

        elif step == 6:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), -1)
            if not m.content.startswith(
                    '/cancel') and not m.content.startswith('/done'):
                if self.bot.trans.plugins.administration.strings.yes.lower(
                ) in m.content.lower():
                    self.bot.administration[gid].public = True
                else:
                    self.bot.administration[gid].public = False
                set_data('administration/%s/%s/public' % (self.bot.name, gid),
                         self.bot.administration[gid].public)
Esempio n. 5
0
    def steps(self, m, step):
        gid = str(m.conversation.id)

        if step == -1:
            self.bot.send_message(
                m,
                self.bot.trans.plugins.administration.strings.cancel %
                m.conversation.title,
                extra={'format': 'HTML'})
            cancel_steps(self.bot, m.conversation.id)

        if step == 0:
            self.bot.send_message(
                m,
                self.bot.trans.plugins.administration.strings.done %
                m.conversation.title,
                extra={'format': 'HTML'})
            cancel_steps(self.bot, m.conversation.id)

        elif step == 1:
            if self.bot.trans.plugins.administration.strings.yes.lower(
            ) in m.content.lower():
                set_step(self.bot, m.conversation.id, get_plugin_name(self), 2)
                if not m.content.startswith(
                        '/next') and not m.content.startswith('/done'):
                    self.bot.send_message(
                        m,
                        self.bot.trans.plugins.administration.strings.ask_link
                        % m.conversation.title,
                        extra={
                            'format': 'HTML',
                            'force_reply': True
                        })

            else:
                cancel_steps(self.bot, m.conversation.id)
                self.bot.send_message(m,
                                      self.bot.trans.errors.unknown,
                                      extra={'format': 'HTML'})

        elif step == 2:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), 3)
            if not m.content.startswith('/next') and not m.content.startswith(
                    '/done'):
                self.administration[gid]['link'] = m.content
                self.bot.send_message(
                    m,
                    self.bot.trans.plugins.administration.strings.ask_alias %
                    m.conversation.title,
                    extra={
                        'format': 'HTML',
                        'force_reply': True
                    })

        elif step == 3:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), 4)
            if not m.content.startswith('/next') and not m.content.startswith(
                    '/done'):
                self.administration[gid]['alias'] = m.content.lower()
                self.bot.send_message(
                    m,
                    self.bot.trans.plugins.administration.strings.ask_rules %
                    m.conversation.title,
                    extra={
                        'format': 'HTML',
                        'force_reply': True
                    })

        elif step == 4:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), 5)
            if not m.content.startswith('/next') and not m.content.startswith(
                    '/done'):
                self.administration[gid]['rules'] = m.content.split('\n')
                self.bot.send_message(
                    m,
                    self.bot.trans.plugins.administration.strings.ask_motd %
                    m.conversation.title,
                    extra={
                        'format': 'HTML',
                        'force_reply': True
                    })

        elif step == 5:
            set_step(self.bot, m.conversation.id, get_plugin_name(self), -1)
            if not m.content.startswith('/next') and not m.content.startswith(
                    '/done'):
                self.administration[gid]['motd'] = m.content
Esempio n. 6
0
    def on_message_receive(self, msg):
        try:
            if msg.content == None or (msg.type != 'inline_query'
                                       and msg.date < time() - 60):
                return

            if msg.sender.id != self.config['owner'] and (
                    has_tag(self, msg.conversation.id, 'muted')
                    or has_tag(self, msg.sender.id, 'muted')):
                return

            step = get_step(self, msg.conversation.id)

            if step:
                for plugin in self.plugins:
                    if get_plugin_name(plugin) == step.plugin and hasattr(
                            plugin, 'steps'):
                        if msg.content.startswith('/cancel'):
                            plugin.steps(msg, -1)
                            cancel_steps(self, msg.conversation.id)

                        if msg.content.startswith('/done'):
                            plugin.steps(msg, 0)
                            cancel_steps(self, msg.conversation.id)

                        else:
                            plugin.steps(msg, step['step'])

            else:
                for plugin in self.plugins:
                    # Always do this action for every message. #
                    if hasattr(plugin, 'always'):
                        plugin.always(msg)

                    # If no query show help #
                    if msg.type == 'inline_query':
                        if msg.content == '':
                            msg.content = 'help'

                    # Check if any command of a plugin matches. #
                    for command in plugin.commands:
                        if 'parameters' not in command:
                            command['parameters'] = None

                        if 'command' in command:
                            if self.check_trigger(command['command'],
                                                  command['parameters'], msg,
                                                  plugin):
                                break

                        if 'friendly' in command:
                            if self.check_trigger(command['friendly'],
                                                  command['parameters'], msg,
                                                  plugin, True):
                                break

                        if 'shortcut' in command:
                            if self.check_trigger(command['shortcut'],
                                                  command['parameters'], msg,
                                                  plugin):
                                break

        except KeyboardInterrupt:
            pass

        except Exception as e:
            catch_exception(e, self)