async def quote(ctx, *args): """ Ensina um novo quote à Luci """ message = ' '.join(word for word in args) author = ctx.author.name if not message: return await ctx.send( 'Por favor insira uma mensagem.\nExemplo:\n'\ '``` !quote my name is bond, vagabond ```' ) if '@' in message: return await ctx.send( 'Eu não posso aprender esse tipo de coisa. Vou contar pro meu pai.' ) server = make_hash('id', ctx.guild.id) payload = Mutation.create_quote(message, server.decode('utf-8'), author) client = get_gql_client(BACKEND_URL) try: response = client.execute(payload) except Exception as err: print(f'Erro: {str(err)}\n\n') return await ctx.send('Buguei') quote = response['create_quote'].get('quote') embed = discord.Embed(color=0x1E1E1E, type="rich") embed.add_field(name='Entendi:', value=quote.get('quote'), inline=True) return await ctx.send('Ok:', embed=embed)
def cli_register_score(performance, rounds): save = input('Do you want to save your performance?\n1 - yes\n2 - no\n> ') valid_options = ['yes', 'y', '1'] if save not in valid_options: return name = None while not name: name = input('Insert a valid name!\n> ') print('-------------------------\n') print('Please wait, connecting withe the server...') score = Mutation.register_score(name, performance, rounds).get('data') score = score.get('createWumpusScore', {}) score = score.get('score') if score: name = score.get('playerName') performance = score.get('performance') rounds = score.get('rounds') date = score.get('gameDatetime') print('Registered score:\n') print('-------------------------') print('NAME PERFORMANCE ROUNDS DATE') print(f'{name} {performance} {rounds} {date}') else: print('No response received from server.')
async def track(self): """ Tracking task """ log.info('tracking...') gql_client = get_gql_client(BACKEND_URL) for guild in self.guilds: log.info(guild.name) server = make_hash('id', guild.id).decode('utf-8') # recupera a configuração do server query = Query.get_custom_config(server) try: response = gql_client.execute(query) except: log.error(f'Cant get server {guild.name} config. Skipping!') continue server_config = response.get('custom_config') main_channel = server_config.get('main_channel') if not main_channel: continue channel = client.get_channel(int(main_channel)) # data da última mensagem enviada no server try: last_message_dt = parser.parse(self.short_memory.get(guild.id)) except: last_message_dt = None if last_message_dt: now = datetime.now().astimezone(tz=timezone.utc) elapsed_time = now.replace( tzinfo=None) - last_message_dt.replace(tzinfo=None) log.info('elapsed time: ') log.info(elapsed_time) log.info('total: ') log.info(elapsed_time.total_seconds() / 60 / 60) if (elapsed_time.total_seconds() / 60 / 60) > self.window: if server_config.get('allow_auto_send_messages'): # envia mensagem no canal principal se autorizado log.info('Notifying channel %s', channel) await channel.send(choice(bored_messages)) # Renova a data de última mensagem para a data atual self.short_memory.set(guild.id, str(now.astimezone(tz=timezone.utc))) log.info('Renewed datetime to %s', str(now)) payload = Mutation.update_emotion(server=server, aptitude=-0.1) try: response = gql_client.execute(payload) log.info('Updated aptitude') except Exception as err: log.error(f'Erro: {str(err)}\n\n')
async def track(self): """ Tracking task """ log.info('tracking...') for guild in self.guilds: log.info(guild.name) # data da última mensagem enviada no server try: last_message_dt = parser.parse(self.short_memory.get(guild.id)) except: last_message_dt = None if last_message_dt: now = datetime.now().astimezone(tz=timezone.utc) elapsed_time = now.replace(tzinfo=None) - last_message_dt.replace(tzinfo=None) log.info('elapsed time: ') log.info(elapsed_time) log.info('total: ') log.info(elapsed_time.total_seconds() / 60 / 60) if (elapsed_time.total_seconds() / 60 / 60) > self.window: # envia mensagem no canal principal log.info('Notifying channel %s', guild.system_channel.name) await guild.system_channel.send(choice(bored_messages)) # Renova a data de última mensagem para a data atual self.short_memory.set( guild.id, str(now.astimezone(tz=timezone.utc)) ) log.info('Renewed datetime to %s', str(now)) # O humor poderia ser localmente em um mongo # Atualiza o humor da Luci no backend server = make_hash('id', guild.id).decode('utf-8') gql_client = get_gql_client(BACKEND_URL) payload = Mutation.update_emotion( server=server, aptitude=-0.1 ) try: response = gql_client.execute(payload) log.info('Updated aptitude') except Exception as err: log.error(f'Erro: {str(err)}\n\n')
async def on_message(message): """ Handler para mensagens do chat. """ channel = message.channel if message.author.bot: return await client.process_commands(message) server = make_hash('id', message.guild.id).decode('utf-8') # guarda a data da mensagem como valor para o id da guilda short_memory = redis.Redis(REDIS_HOST, REDIS_PORT) short_memory.set(message.guild.id, str(message.created_at)) text = message.content global_intention, specific_intention = get_intentions(text) is_offensive = validate_text_offense(text) text_pol = extract_sentiment(text) user_name = message.author.name new_humor = change_humor_values(text_pol, is_offensive) friendshipness = -0.5 + text_pol if is_offensive else text_pol msg = { 'global_intention': global_intention, 'specific_intention': specific_intention, 'text': text } user_id = make_hash(server, message.author.id).decode('utf-8') gql_client = get_gql_client(BACKEND_URL) # Atualiza o humor da Luci payload = Mutation.update_emotion(server=server, **new_humor) try: gql_client.execute(payload) except Exception as err: log.error(f'Erro: {str(err)}\n\n') # Atualiza o humor status do usuario payload = Mutation.update_user(user_id, user_name, friendshipness, new_humor, msg) try: gql_client.execute(payload) except Exception as err: log.error(f'Erro: {str(err)}\n\n') # get server configuration query = Query.get_custom_config(server) try: response = gql_client.execute(query) except Exception as error: log.error(str(error)) response = {} server_config = response.get('custom_config') # Atualiza reconhecimento de respostas, se for resposta à outra mensagem if message.reference: payload = Mutation.assign_response( text=message.reference.resolved.content, possible_response=msg) try: response = gql_client.execute(payload) except Exception as err: log.error(f'Erro: {str(err)}\n\n') # process @Luci mentions if str(channel.guild.me.id) in text: # busca possíveis respostas na memória de longo prazo payload = Query.get_possible_responses(text=remove_id(text)) try: response = gql_client.execute(payload) except Exception as err: log.error(f'Erro: {str(err)}\n\n') response = {'messages': []} if response.get('messages'): possible_responses = [] for msg in response['messages']: for possible_response in msg.get('possible_responses'): possible_responses.append(possible_response.get('text')) if possible_responses: return await channel.send(choice(possible_responses)) # Caso não conheça nenhuma resposta, use o classificador inocente return await channel.send( naive_response(remove_id(text), reference=server)) # 10% chance to not answer if is offensive and lucis not mentioned is_allowed = server_config.get('allow_auto_send_messages') if not is_allowed: return if is_offensive and choice([1, 0]) and choice([1, 0]): return await channel.send( f'{message.author.mention} {choice(offended)}')
async def on_message(message): """ Handler para mensagens do chat. """ channel = message.channel if message.author.bot: return await client.process_commands(message) # guarda a data da mensagem como valor para o id da guilda short_memory = redis.Redis(REDIS_HOST, REDIS_PORT) short_memory.set(message.guild.id, str(message.created_at)) text = message.content global_intention, specific_intention = get_intentions(text) is_offensive = validate_text_offense(text) text_pol = extract_sentiment(text) user_name = message.author.name new_humor = change_humor_values(text_pol, is_offensive) friendshipness = -0.5 + text_pol if is_offensive else text_pol msg = { 'global_intention': global_intention, 'specific_intention': specific_intention, 'text': text } server = make_hash('id', message.guild.id).decode('utf-8') user_id = make_hash(server, message.author.id).decode('utf-8') gql_client = get_gql_client(BACKEND_URL) # Atualiza o humor da Luci payload = Mutation.update_emotion(server=server, **new_humor) try: response = gql_client.execute(payload) except Exception as err: log.error(f'Erro: {str(err)}\n\n') # Atualiza o humor status do usuario payload = Mutation.update_user( user_id, user_name, friendshipness, new_humor, msg ) try: response = gql_client.execute(payload) except Exception as err: log.error(f'Erro: {str(err)}\n\n') # Atualiza reconhecimento de respostas, se for resposta à outra mensagem if message.reference: payload = Mutation.assign_response( text=message.reference.resolved.content, possible_response=msg ) try: response = gql_client.execute(payload) except Exception as err: log.error(f'Erro: {str(err)}\n\n') # process @Luci mentions if str(channel.guild.me.id) in text: return await channel.send(naive_response(remove_id(text))) # 10% chance to not answer if is offensive and lucis not mentioned if is_offensive and choice([1, 0]) and choice([1, 0]): return await channel.send(f'{message.author.mention} {choice(offended)}')