text: # Copyright (C) 2019 The Raphielscape Company LLC.
  #
  # Licensed under the Raphielscape Public License, Version 1.d (the "License");
  # you may not use this file except in compliance with the License.
  #
  """ Userbot module for filter commands """
  
  from asyncio import sleep
  from re import IGNORECASE, escape, search
  
  from userbot import BOTLOG, BOTLOG_CHATID, CMD_HELP
  from userbot.events import register
  
  
  @register(incoming=True, disable_edited=True, disable_errors=True)
  async def filter_incoming_handler(handler):
      """ Comprueba si el mensaje entrante contiene un controlador de un filtro """
      try:
          if not (await handler.get_sender()).bot:
              try:
                  from userbot.modules.sql_helper.filter_sql import get_filters
              except AttributeError:
                  await handler.edit("`Running on Non-SQL mode!`")
                  return
              name = handler.raw_text
              filters = get_filters(handler.chat_id)
              if not filters:
                  return
              for trigger in filters:
                  pattern = r"( |^|[^\w])" + escape(trigger.keyword) + r"( |$|[^\w])"
                  pro = search(pattern, name, flags=IGNORECASE)
                  if pro and trigger.f_mesg_id:
                      msg_o = await handler.client.get_messages(
                          entity=BOTLOG_CHATID, ids=int(trigger.f_mesg_id)
                      )
                      await handler.reply(msg_o.message, file=msg_o.media)
                  elif pro and trigger.reply:
                      await handler.reply(trigger.reply)
      except AttributeError:
          pass
  
  
  @register(outgoing=True, pattern=r"^.filter (.*)")
  async def add_new_filter(new_handler):
      """ El comando .filter, permite agregar nuevos filtros en un chat """
      try:
          from userbot.modules.sql_helper.filter_sql import add_filter
      except AttributeError:
          await new_handler.edit("`Running on Non-SQL mode!`")
          return
      value = new_handler.pattern_match.group(1).split(None, 1)
      """ - La primera palabra después de .filter (espacio) es la palabra clave - """
      keyword = value[0]
      try:
           string = value[1]
      except IndexError:
          string = None
      msg = await new_handler.get_reply_message()
      msg_id = None
      if msg and msg.media and not string:
          if BOTLOG_CHATID:
              await new_handler.client.send_message(
                  BOTLOG_CHATID,
                  f"#FILTER\nCHAT ID: {new_handler.chat_id}\nTRIGGER: {keyword}"
                  "\n\nEl siguiente mensaje se guarda como los datos de respuesta del filtro para el chat, NO lo elimine !!",
              )
              msg_o = await new_handler.client.forward_messages(
                  entity=BOTLOG_CHATID,
                  messages=msg,
                  from_peer=new_handler.chat_id,
                  silent=True,
              )
              msg_id = msg_o.id
          else:
              return await new_handler.edit(
                  "`Guardar medios como respuesta al filtro requiere que se establezca BOTLOG_CHATID.`"
              )
      elif new_handler.reply_to_msg_id and not string:
          rep_msg = await new_handler.get_reply_message()
          string = rep_msg.text
      success = "`Filtro`  **{}**  `{} con éxito`."
      if add_filter(str(new_handler.chat_id), keyword, string, msg_id) is True:
          await new_handler.edit(success.format(keyword, "agregado"))
      else:
          await new_handler.edit(success.format(keyword, "actualizado"))
  
  
  @register(outgoing=True, pattern=r"^.stop (.*)")
  async def remove_a_filter(r_handler):
      """ For .stop command, allows you to remove a filter from a chat. """
      try:
          from userbot.modules.sql_helper.filter_sql import remove_filter
      except AttributeError:
          return await r_handler.edit("`Running on Non-SQL mode!`")
      filt = r_handler.pattern_match.group(1)
      if not remove_filter(r_handler.chat_id, filt):
          await r_handler.edit("`Filter`  **{}**  `doesn't exist`.".format(filt))
      else:
          await r_handler.edit(
              "`Filtro`  **{}**  `fue eliminado con éxito`.".format(filt)
          )
  
  
  @register(outgoing=True, pattern="^.rmbotfilters (.*)")
  async def kick_marie_filter(event):
      """ El comando .rmfilters, le permite borrar todos los filtros del chat. """
      event.text[0]
      bot_type = event.pattern_match.group(1).lower()
      if bot_type not in ["marie", "rose"]:
          return await event.edit("`Ese bot aún no es compatible!`")
      await event.edit("```se eliminaran todos los filtros.!```")
      await sleep(3)
      resp = await event.get_reply_message()
      filters = resp.text.split("-")[1:]
      for i in filters:
          if bot_type.lower() == "marie":
              await event.reply("/stop %s" % (i.strip()))
          if bot_type.lower() == "rose":
              i = i.replace("`", "")
              await event.reply("/stop %s" % (i.strip()))
          await sleep(0.3)
      await event.respond("```Filtros de bots purgados con éxito !```\n Gimme cookies!")
      if BOTLOG:
          await event.client.send_message(
              BOTLOG_CHATID, "Limpié todos los filtros en " + str(event.chat_id)
          )
  
  
  @register(outgoing=True, pattern="^.filters$")
  async def filters_active(event):
      """ El comando .filters, enumera todos los filtros activos en un chat. """
      try:
          from userbot.modules.sql_helper.filter_sql import get_filters
      except AttributeError:
          return await event.edit("`Running on Non-SQL mode!`")
      transact = "`No hay filtros en este chat.`"
      filters = get_filters(event.chat_id)
      for filt in filters:
          if transact == "`No hay filtros en este chat.`":
              transact = "Filtros activos en este chat:\n"
              transact += "`{}`\n".format(filt.keyword)
          else:
              transact += "`{}`\n".format(filt.keyword)
  
      await event.edit(transact)
  
  
  CMD_HELP.update(
      {
          "filter": ".filters\
      \nUso: Muestra todos los filtros de userbot activos en un chat.\
      \n\n.filter <palabra clave> <texto de respuesta> o responda a un mensaje con .filter <palabra clave>\
      \nUso: Guarda el mensaje respondido como una respuesta a la 'palabra clave'.\
      \nEl bot responderá al mensaje cada vez que se mencione una 'palabra clave'.\
      \nFunciona con todo, desde archivos hasta pegatinas.\
      \n\n.stop <filter>\
      \nUso: Detiene el filtro especificado.\
      \n\n.rmbotfilters <marie/rose>\
      \nUso: Elimina todos los filtros de los bots de administración (actualmente admitidos: Marie, Rose y sus clones) en el chat."
      }
  )
  