async def on_message(self, message): """Método ejecutado cada vez que se recibe un mensaje""" text = message.content author = message.author.name chan = message.channel is_pm = message.server is None is_owner = 'owners' in self.config and message.author.id in self.config['owners'] # !ping #if text == '!ping': # await self.send_message(chan, 'pong!') # !version if text == '!version' or text == '!info': info_msg = "```\nAutores: {}\n\nVersión: {}\n\nEstado: {}```" await self.send_message(chan, info_msg.format(__author__, __version__, __status__)) # !callate elif text == '!callate': await self.send_message(chan, 'http://i.imgur.com/nZ72crJ.jpg') # !choose elif text.startswith('!choose '): options = text[8:].split("|") if len(options) < 2: return # Validar que no hayan opciones vacías for option in options: if option.strip() == '': return answer = random.choice(options).strip() text = 'Yo elijo **{}**'.format(answer) await self.send_message(chan, text) # !f elif text.startswith('!f'): if text.strip() == '!f': text = "**{}** ha pedido respetos :hearts:".format(author) await self.send_message(chan, text) elif text.startswith('!f ') and len(text) >= 4: respects = text[3:] text = "**{}** ha pedido respetos por **{}** :hearts:".format(author, respects) await self.send_message(chan, text) # !ban (no PM) elif text.startswith('!ban '): if is_pm: await self.send_message(chan, 'me estai weando?') return for mention in message.mentions: if 'owners' in self.config and mention.id in self.config['owners']: text = 'nopo wn no hagai esa wea' await self.send_message(chan, text) elif random.randint(0, 1): user, _ = Ban.get_or_create(user=mention, server=message.server) update = Ban.update(bans=Ban.bans + 1) update = update.where(Ban.user == mention, Ban.server == message.server) update.execute() if user.bans + 1 == 1: text = 'Uff, ¡**{}** se fue baneado por primera vez!'.format(mention.name) else: text = '¡**{}** se fue baneado otra vez y registra **{} baneos**!' text = text.format(mention.name, user.bans + 1) await self.send_message(chan, text) else: text = '¡**{}** se salvo del ban de milagro!'.format(mention.name) await self.send_message(chan, text) # !resetban elif text.startswith("!resetban "): if not is_owner: await self.send_message(chan, 'USUARIO NO AUTORIZADO, ACCESO DENEGADO') return if len(text.split(' ')) > 2 or len(message.mentions) < 1: await self.send_message(chan, 'Formato: !resetban <mención>') return mention = message.mentions[0] user, _ = Ban.get_or_create(user=mention, server=message.server) user.bans = 0 user.save() await self.send_message(chan, 'Bans reiniciados xd') # !redditor elif text.startswith('!redditor '): user = text[10:].split(' ')[0].lower().strip() if user.startswith('/u/'): user = user[3:] if not re.match('^[a-zA-Z0-9_-]*$', user): return redditor, _ = Redditor.get_or_create(name=user) if redditor.posts > 0: suffix = 'post' if redditor.posts == 1 else 'posts' text = '**/u/{name}** ha creado **{num}** {suffix}.' text = text.format(name=user, num=redditor.posts, suffix=suffix) await self.send_message(chan, text) else: text = '**/u/{name}** no ha creado ningún post.' text = text.format(name=user) await self.send_message(chan, text) # ! <meme> | ¡<meme> elif text.startswith('! ') or text.startswith('¡'): meme_query = '' if text.startswith('! '): meme_query = text[2:] else: meme_query = text[1:] try: meme = Meme.get(Meme.name == meme_query) await self.send_message(chan, meme.content) except Meme.DoesNotExist: pass elif text.startswith('!set '): meme_query = text[5:].strip().split(' ') if not is_owner: await self.send_message(chan, 'USUARIO NO AUTORIZADO, ACCESO DENEGADO') return if len(meme_query) < 2: await self.send_message(chan, 'Formato: !set <nombre> <contenido>') return meme_name = meme_query[0].strip() meme_cont = ' '.join(meme_query[1:]).strip() meme, created = Meme.get_or_create(name=meme_name) meme.content = meme_cont meme.save() if created: msg = 'Valor **{name}** creado'.format(name=meme_name) self.log.info('Meme %s creado con valor: "%s"', meme_name, meme_cont) else: msg = 'Valor **{name}** actualizado'.format(name=meme_name) self.log.info('Meme %s actualizado a: "%s"', meme_name, meme_cont) await self.send_message(chan, msg) elif text.startswith('!unset '): meme_name = text[7:].strip() if not is_owner: await self.send_message(chan, 'USUARIO NO AUTORIZADO, ACCESO DENEGADO') return if meme_name == "": await self.send_message(chan, 'Formato: !unset <nombre>') return try: meme = Meme.get(name=meme_name) meme.delete_instance() msg = 'Valor **{name}** eliminado'.format(name=meme_name) await self.send_message(chan, msg) self.log.info('Meme %s eliminado', meme_name) except Meme.DoesNotExist: msg = 'El valor con nombre {name} no existe'.format(name=meme_name) await self.send_message(chan, msg) elif text == '!list': if not is_owner: await self.send_message(chan, 'USUARIO NO AUTORIZADO, ACCESO DENEGADO') return namelist = [] for item in Meme.select().iterator(): namelist.append(item.name) word = 'valor' if len(namelist) == 1 else 'valores' resp = 'Hay {} {}: {}'.format(len(namelist), word, ', '.join(namelist)) await self.send_message(chan, resp)