5
respostas

Dúvida referente a automatização, primeiros passos.

Estou começando um projeto aonde eu quero automatizar alguns comandos dentro de um jogo online, basicamente consiste no seguinte o "GM" anuncia no global um "move" e eu gostaria de realizar a automatização para que o robo fizesse a digitação desse comando de forma automática e ágil, como eu poderia realizar a identificação desse global e em sequência a automatização dos comandos.

5 respostas

Bom dia, Felipe!

Que bom que está interessado em colocar seus conhecimentos na área com um projeto prático. Essa é, de fato, uma das maneiras mais eficientes de se aprender.

Contudo, antes que comece, quero lhe perguntar o quanto você conhece de Python e está familiarizado com a linguagem? Terminou a formação inicial de Python, ou já vem com bagagem suficiente da linguagem para não precisar dela? Pois para um projeto assim, a primeira coisa importante é dominar bem a linguagem. Caso ainda não tenha dominado completamente a criação de classes, a sintaxe completa da linguagem, e orientação a objetos com Python, sugiro dar um passo para trás, estudar para construir seus fundamentos, e, em seguida, começar a planejar um projeto como esse.

Mas, caso já tenha sim esses conhecimentos, e consiga gerar bom código python, orientado a objeto, sem o uso de IA, você precisa responder às seguintes perguntas se quiser conseguir planejar esse projeto:

Onde o GM anuncia o 'move'? É na tela de um jogo online? É no chat desse jogo online? Existe outro lugar onde esse move vá? Um discord, ou algo assim? A mensagem do GM sempre fica na mesma posição da tela? Tudo isso vai influenciar em como desenvolver esse projeto.

Olá Edmilson, aonde o GM anuncia é tudo no mesmo lugar, centralizado no meio da tela dentro do jogo mesmo e sim esses comandos me levam a um lugar.

Olá, Felipe.

Você não respondeu com relação à sua familiaridade no Python, então, vou presumir que tem conhecimento o bastante para seguir com esse projeto. Caso não o tenha e não queira se frustrar, estude a base e os fundamentos.

Para isso a forma mais prática de realizar sua automação é com a biblioteca PyAutoGUI que vai usar a biblioteca de visão computacional opencv por debaixo dos panos para identificar o que está na tela.

A primeira etapa do seu projeto seria conseguir fazer um robô que consiga identificar a mensagem do GM sempre que ela aparecer. Tente fazer com que, sempre que a mensagem do GM aparecer, seu robô printe no seu terminal Olá GM, ou algo assim. Algo que só você conseguirá ver, mas que pode te ajudar a validar se conseguiu identificar a mensagem do GM. Em seguida, tente fazer com que seu robô consiga baixar um print com a mensagem do gm em uma pasta no seu projeto, assim você vai ter a mensagem e vai saber se o seu robô está realmente conseguindo captar as mensagens do GM.

Sua próxima etapa é conseguir (utilizando provavelmente o próprio opencv, mas não sei exatamente, isso você e o Google teriam que conversar) pegar o texto do GM que agora é uma imagem, em texto de verdade. Em seguida você trabalha com esse texto e transforma no texto que você quer que seja digitado (talvez com um dicionário mapeando comando do gm em comando para digitar. exemplo: {'Pulem': 'space_bar', 'Corra'; '\correr'} ou seja lá qual for o mapeamento do seu projeto.

Por fim, voltando ao PyAutoGUI, você vai usar ele para escrever o resultado final no seu teclado, como se você estivesse digitando.

Quando isso estiver funcional, para otimizar, você pode trabalhar em não salvar o print da mensagem do GM na pasta, apenas passar ela em memória, ou algo assim, mas essa seria uma base de como fazer o seu robô.

Muitas horas de pesquisa e desenvolvimento, mas esse parece um projeto legal.

De resto você vai aprender enquanto faz, como por exemplo, como fazer planos para algo como o que te envio agora, que é só um screening inicial que estou dando sem ter muitas informações.

Consegui desenvolver, é funcional mas eu não consegui deixar ele ainda mais rápido, seria possível ou depende mesmo do poder computacional para que ele fique mais rápido a detecção e a digitação?

Olá, Felipe.

Bom, para que você melhore a performance desse código, eu sugeriria começar com uma perfilação.

Utilizando uma função como esse decorador aqui, por exemplo:

import  time

def decorador_profilação(func):
    def wraper(*args, **kwargs):
        inicio = time.time()
        result = func(*args, **kwargs)
        fim = time.time()
        print(f'A função {func} levou {fim - inicio} segundos para ser executada')
        return result
    return wraper

Para conseguir identificar quais são as funções em que seu projeto passa mais tempo. A partir daí você sabe onde vale a pena focar seu tempo tentando otimizar.

Tenho a impressão que a mais demorada será a get_chat_text, e, se for o caso, seria nela que você deve focar as melhorias de performance.