Skip to content
This repository has been archived by the owner on Feb 26, 2024. It is now read-only.

Commit

Permalink
correções de bugs e adição de mensagens com GPT
Browse files Browse the repository at this point in the history
  • Loading branch information
JonasCaetanoSz committed Feb 26, 2024
1 parent 240e7d0 commit d5bde0c
Show file tree
Hide file tree
Showing 14 changed files with 486 additions and 87 deletions.
4 changes: 0 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@

sessions/

# configurações dentro do programa

state.json

# bytecode python

__pycache__/
Expand Down
22 changes: 20 additions & 2 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ maturador de chips é um pequeno programa para "esquentar" contas do whatssap e

## Instalação

Se você é usuário Windows, pode <a href="https://github.com/JonasCaetanoSz/maturador-de-chips/releases/download/v16.12.2023/Maturador_setup16.12.2023.exe"> fazer download do instalador x64</a> ou siga as instruções abaixo para executar o código-fonte da versão de codigo aberto:
Se você é usuário Windows, pode <a href="https://github.com/JonasCaetanoSz/maturador-de-chips/releases/download/v24.02.2024/MaturadorSetup_24.02.2024.exe"> fazer download do instalador x64</a> ou siga as instruções abaixo para executar o código-fonte da versão de codigo aberto:

- Clone o repositório

Expand Down Expand Up @@ -48,6 +48,7 @@ python main.py
- Definir troca de conta após X mensagens
- Definir máximo de mensagens
- Parar em caso de bloqueio
- Mensagens com ChatGpt
- sem limite de instâncias
- escolher nome instância
- remover instância
Expand All @@ -63,10 +64,27 @@ python main.py
Este é o comando pyinstaller para gerar o executavel do maturador:

```shell
pyinstaller --noconfirm --onedir --windowed --icon "(pwd)/pages/assets/medias/icon.ico" --add-data "(pwd)/pages;pages/" --add-data "(pwd)/scripts;scripts/" --add-data "(pwd)/LICENSE;." --add-data "(pwd)/README.MD;." --add-data "(pwd)/user-agent;." --add-data "(pwd)/requirements.txt;." "(pwd)/main.py"
pyinstaller --noconfirm --onedir --windowed --icon "$(pwd)/pages/assets/medias/icon.ico" --add-data "$(pwd)/pages;pages/" --add-data "$(pwd)/scripts;scripts/" --add-data "$(pwd)/LICENSE;." --add-data "$(pwd)/gpt.py;." --add-data "$(pwd)/README.MD;." --add-data "$(pwd)/user-agent;." --add-data "$(pwd)/requirements.txt;." "$(pwd)/main.py"

```

### Encontrar o cookie de sessão para API não oficial?


- 1 ° acesse o site <a href="https://bing.com"> bing </a> e faça login usando uma conta miscrosoft. após login abra o *developer tools* presionando as teclas **CTRL + SHIFT + I** ou siga os passos na foto abaixo para realizar esta ação:

![step1](https://i.ibb.co/TTSSXm1/passo-1.png)


- 2 ° busque no submenu que fica ao lado de *network*, a opção **Application** e clique sobre ela:

![step2](https://i.ibb.co/Q8JZpPZ/passo-2.png)

- 3 ° por ultimo encontre o cookie nomeado de **_U** e copie seu valor:

![step3](https://i.ibb.co/rdBFNt4/passo-3.png)


## Licença


Expand Down
11 changes: 5 additions & 6 deletions accounts.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@

from PyQt5.QtWebEngineWidgets import (QWebEngineView, QWebEngineProfile, QWebEnginePage)
from PyQt5.QtWebEngineCore import (QWebEngineUrlRequestInterceptor)
from PyQt5.QtWebChannel import QWebChannel
from PyQt5.QtGui import (QIcon, QCursor)
from PyQt5.QtCore import (QUrl, Qt)

from controller import Controller
import shutil
import json
import os
Expand All @@ -40,7 +42,6 @@ def javaScriptConsoleMessage(self, level, message, lineNumber, sourceID):
except:
pass


# interceptar as requisições que vem do WhatsApp web para filtrar
# as que são feitas para enviar dados ao maturador, isso é necessário
# pois o WhatsApp web bloqueia requisições feitas para domínios
Expand Down Expand Up @@ -68,10 +69,9 @@ def interceptRequest(self, info):
SIGNALS.account_blocked.emit(data)
info.block(True)


class MainWindow(QMainWindow):
def __init__(self):
self.controller = None
self.controller:Controller = None
self._is_open = False
super().__init__()
self.webs_engine = []
Expand Down Expand Up @@ -234,11 +234,10 @@ def load_webviews(self):
except FileNotFoundError: # a pasta de sessões ainda não existe
return
for sessionname in sessions:

webview = QWebEngineView()
profile = QWebEngineProfile(f"storage{sessionname}", webview)
session_dir = os.getcwd() + f"/sessions/{sessionname}"

# apaga Service Worker porque está causando problema com a sessão

service_Worker_path = os.path.join(session_dir, "Service Worker")
Expand All @@ -261,7 +260,7 @@ def load_webviews(self):
self.webviews.append(webview)
webview.page().loadFinished.connect(lambda ok, session_name=sessionname : self.run_script(session_name))

# injeta script login.js
# injeta script login.js e script do webchannel

def run_script(self, session_name:str):
for idx, key in enumerate(start=0, iterable=self.buttons.keys()):
Expand Down
2 changes: 1 addition & 1 deletion controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,4 +170,4 @@ def message_box(self, message, title) -> None:
self.dashboard_window,
title,
message
)
)
197 changes: 197 additions & 0 deletions gpt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
from openai import OpenAI
import random
import g4f
import sys

sys.stdout = open("MaturadorLogs.txt", "a", encoding="utf-8")
sys.stderr = open("MaturadorLogs.txt", "a", encoding="utf-8")

TOPICS = [
"História mundial",
"Ciência",
"Cultura",
"Tecnologia",
"Política",
"Filosofia",
"Arte",
"Literatura",
"Geografia",
"Astronomia",
"Medicina",
"Música",
"Matemática",
"Biologia",
"Economia",
"Psicologia",
"Sociologia",
"Antropologia",
"Arqueologia",
"Educação",
"Religião",
"Esportes",
"Meio ambiente",
"Direito",
"Engenharia",
"Alimentação e nutrição",
"Moda",
"Cinema",
"Teatro",
"Fotografia",
"Dança",
"Agricultura",
"Energias renováveis",
"Jogos",
"Design",
"Saúde pública",
"Marketing",
"Administração",
"Linguística",
"Química",
"Física",
"Robótica",
"Inteligência artificial",
"Guerras mundiais",
"Revoluções",
"Movimentos sociais",
"Grandes descobrimentos",
"Colonização",
"Imperialismo",
"Revolução industrial",
"Revolução tecnológica",
"Guerra fria",
"Globalização",
"Mudanças climáticas",
"Exploração espacial",
"Avanços médicos",
"Invenções",
"Descobertas científicas",
"Grandes artistas",
"Grandes escritores",
"Grandes cientistas",
"Grandes filósofos",
"Grandes músicos",
"Grandes líderes políticos",
"Grandes inventores",
"Grandes exploradores",
"Grandes batalhas",
"Grandes catástrofes naturais",
"Grandes epidemias",
"Geopolítica",
"Inteligência emocional",
"Desenvolvimento sustentável",
"Economia comportamental",
"Criptomoedas",
"Inteligência de mercado",
"Tendências de consumo",
"Inovação tecnológica",
"Cibersegurança",
"Privacidade de dados",
"Bioética",
"Direitos humanos",
"Neurociência",
"Interação humano-computador",
"Robótica assistencial",
"Realidade virtual",
"Realidade aumentada",
"Nanotecnologia",
"Internet das coisas",
"Machine learning",
"Aprendizado profundo",
"Redes neurais",
"Computação quântica",
"Impressão 3D",
"Biotecnologia",
"Genética",
"Clonagem",
"Transplantes de órgãos",
"Neurotecnologia"

]

class GptGenerateMessage():
def __init__(self) -> None:
g4f.check_version = False
self._last_message = None
self._last_question = None
self.client:OpenAI = None


def generate_question_by_unnoficial(self) -> str:
response = g4f.ChatCompletion.create(
model=g4f.models.gpt_4_turbo,
provider=g4f.Provider.Bing,
messages=[{"role": "user", "content": random.choice(["conte uma curiosidade sobre " + random.choice(TOPICS) , "me faça uma pergunta sobre " + random.choice(TOPICS)]) }],
stream=False)
return response

def generate_response_by_unnoficial(self, question:str) -> str:
response = g4f.ChatCompletion.create(
model=g4f.models.gpt_4_turbo,
provider=g4f.Provider.Bing,
messages=[{"role": "user", "content": "uma pergunta para você: " + question}],
stream=False

)
return response

def by_unnoficial(self) -> str|tuple[bool, str]:
try:
if random.choice([True, True, False]) and self._last_message:
self._last_message = self.generate_response_by_unnoficial(question=self._last_message)
return self._last_message

self._last_message = self.generate_question_by_unnoficial()
return self.parser_message(self._last_message)

except Exception as response_by_unnoficial_error:
return (False, str(response_by_unnoficial_error))

def generate_question_by_official(self) -> str:
response = self.client.chat.completions.create(
messages=[{"role": "user", "content": random.choice(["conte uma curiosidade sobre " + random.choice(TOPICS) , "me faça uma pergunta sobre " + random.choice(TOPICS)]),}],
model="gpt-3.5-turbo",
)
return response

def generate_response_by_official(self, question:str) -> str:
response = self.client.chat.completions.create(
messages=[{"role": "user","content": "uma pergunta para você: " + question,}],
model="gpt-3.5-turbo",
)
return response.strip()

def by_official(self) -> str|tuple[bool, str]:
try:
if random.choice([True, True, False]) and self._last_message:
self._last_message = self.generate_response_by_official(question=self._last_message)
return self._last_message

self._last_message = self.generate_question_by_official()
return self.parser_message(self._last_message)

except Exception as response_by_official_error:
return (False, str(response_by_official_error))

def set_bing_cookie(self, cookie:str) -> None:
g4f.set_cookies(".bing.com", {"_U": cookie})


def ininialize_openai_client(self, token:str) -> None:
self.client = OpenAI(api_key=token)

@staticmethod
def parser_message(text:str):
parsed_message = ""
for _ in text.split():
parsed_message += " " + _.replace("**", "*")
return parsed_message \
.replace("**Pergunta aleatória:**", "") \
.replace("**Curiosidade Aleatória: ", "") \
.replace("Olá, este é o Copilot. Eu sou um assistente de inteligência artificial que pode conversar com você sobre vários tópicos e criar conteúdo interessante.", "") \
.replace( "Olá, este é o Copilot. Eu sou um assistente de inteligência artificial que pode conversar com você sobre vários tópicos e ajudá-lo com algumas tarefas.", "") \
.replace( "Olá, Eu sou o Copilot.", "") \
.replace("**Pergunta aleatória:**", "") \
.replace("**Pergunta aleatória:**", "") \
.replace("**Curiosidade Aleatória: ", "") \
.replace("**Curiosidade Aleatória:**", "") \
.replace( "Olá, este é o Copilot.", "")
7 changes: 4 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class SignalReceive(QtCore.QObject):
start_maturation = QtCore.pyqtSignal(dict, dict)
# exibir um Qmessagebox
message_box = QtCore.pyqtSignal(str, str)

# iniciar maturação

wapp:WhatsApp = None
Expand All @@ -37,7 +38,7 @@ def start_maturation(window, messages_file, phones,signals):

# iniciar a aplicação

VERSION = "16.12.2023"
VERSION = "24.02.2024"

if __name__ == "__main__":

Expand All @@ -49,10 +50,10 @@ def start_maturation(window, messages_file, phones,signals):
window = dashboard.MainWindow(accounts_page, signals, app, controller_instance)
accounts_page.controller = controller_instance
controller_instance.dashboard_window = window

# conectar os sinais de pyqtsignal

signals.new_phone_number.connect(lambda account_data:( controller_instance.account_added(account_data) == window.webview.reload() if "/dashboard" in window.webview.url().toString() else None) if account_data else window.webview.reload())
signals.new_phone_number.connect(lambda account_data: [controller_instance.account_added(account_data), window.webview.reload()] if account_data else window.webview.reload())
signals.start_maturation.connect(lambda messages_file, phones: start_maturation(window=window, messages_file=messages_file, phones=phones,signals=signals))
signals.stop_maturation.connect(lambda: threading.Thread(target=wapp.stop() if wapp else None, daemon=True).start())
signals.account_blocked.connect(lambda account_data: ( controller_instance.account_blocked(account_data) == wapp.set_account_block(phone=account_data["phone"]) ))
Expand Down
Loading

0 comments on commit d5bde0c

Please sign in to comment.