diff --git a/.gitignore b/.gitignore index 92f9201..7930832 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ src/node_modules/ node_modules/ cookies.txt bin/ -mychats.txt \ No newline at end of file +mychats.txt +manybot.conf \ No newline at end of file diff --git a/README.md b/README.md index bdcaf84..08f9519 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,44 @@ Algumas funcionalidades desse bot inclui: - Ferramenta para pegar IDs dos chats - Entre outros +--- + +# Requisitos +- Node.js +- NPM +- Sistema Linux ou Windows + +obs: Sistemas Android e iOS ainda não são 100% compatíveis. O suporte para Termux está em fases de testes e sem garantia de funcionamento correto. + +# Instalação (Linux) + +1. Clone o repositório e entre: +``` +git clone https://github.com/synt-xerror/manybot +cd manybot +``` + +2. Execute o script de instalação: +``` +bash setup +``` + +3. Rode o bot pela primeira vez: +``` +node src/main.js +``` +Ele vai pedir para que escaneie o QR Code com seu celular. +Vá em: WhatsApp > Trẽs pontos no canto inferior > Dispositivos conectados > Conectar um dispositivo + +# Instalação (Windows) + +O uso desse bot foi pensado para rodar em um terminal Linux com Bash. No entanto, você pode usar o Git Bash, que simula um terminal Linux com Bash real: + +1. Para baixar o Git Bash: https://git-scm.com/install/windows +Selecione a versão que deseja (portátil ou instalador) + +2. Para baixar o Node.js: https://nodejs.org/pt-br/download/current +Role a tela e selecione "binário independente (.zip)" +Ou se preferir, use um gerenciador de pacotes como mostra no conteúdo inicial + +Após baixar e instalar ambos, abra o Git Bash e execute exatamente os mesmos passos do Linux diff --git a/deploy.sh b/deploy.sh index e9b0a35..0231dcc 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,6 +1,6 @@ #!/bin/bash -# development tool +# ferramenta de desenvolvimento apenas, pode apagar se quiser # ./deploy COMMIT_MSG="$1" @@ -12,15 +12,6 @@ if [ -z "$COMMIT_MSG" ] || [ -z "$BRANCH" ]; then exit 1 fi -echo "Rewriting config.js" -cat > "src/config.js" << 'EOF' -export const CLIENT_ID = "bot_permanente"; -export const BOT_PREFIX = "🤖 *ManyBot:* "; -export const CHATS = [ - // coloque os chats que quer aqui -]; -EOF - # mudar para a branch git checkout $BRANCH || { echo "Error ao change to $BRANCH"; exit 1; } diff --git a/package-lock.json b/package-lock.json index ec19f36..1713372 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "whatsapp-bot", - "version": "2.3.1", + "version": "2.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "whatsapp-bot", - "version": "2.3.1", + "version": "2.3.2", "dependencies": { "node-addon-api": "^7", "node-gyp": "^12.2.0", diff --git a/setup b/setup index 17704ce..e046515 100755 --- a/setup +++ b/setup @@ -1,6 +1,9 @@ #!/bin/bash set -e +# Salvando diretório para evitar problemas +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + # ------------------------ # Cores # ------------------------ @@ -48,8 +51,6 @@ cat << "EOF" website: www.mlplovers.com.br/manybot repo: github.com/synt-xerror/manybot -A Amizade é Mágica! - EOF echo -e "${RESET}" } @@ -190,6 +191,27 @@ fi log_debug "Total de arquivos para baixar: ${#files[@]}" +# ------------------------ +# Config +# ------------------------ +log_info "Criando arquivo de configuração" + +cat > "src/config.js" << 'EOF' +export const CLIENT_ID = "bot_permanente"; +export const BOT_PREFIX = "🤖 *ManyBot:* "; +export const CMD_PREFIX = "!"; +export const CHATS = [ + // coloque os chats que quer aqui +]; + +EOF + +if [[ -f src/config.js ]]; then + log_ok "Arquivo de configuração criado" +else + log_error "Erro durante criação do arquivo de configuração" +fi + # ------------------------ # Download # ------------------------ @@ -201,4 +223,4 @@ for file in "${files[@]}"; do download_file "$url" "$dest" done -log_ok "Setup concluído com sucesso" \ No newline at end of file +log_ok "Setup concluído com sucesso.\nRode sempre na raíz: 'node src/main.js' (ou equivalente) para rodar o bot." \ No newline at end of file diff --git a/src/config.js b/src/config.js index 2e1cfda..94f0a7c 100644 --- a/src/config.js +++ b/src/config.js @@ -1,5 +1,34 @@ -export const CLIENT_ID = "bot_permanente"; -export const BOT_PREFIX = "🤖 *ManyBot:* "; -export const CHATS = [ - // coloque os chats que quer aqui -]; +import fs from "fs"; + +function parseValue(v) { + v = v.trim(); + + // lista: [a, b, c] + if (v.startsWith("[") && v.endsWith("]")) { + return v + .slice(1, -1) + .split(",") + .map(x => x.trim()) + .filter(Boolean); + } + + return v; +} + +const raw = fs.readFileSync("manybot.conf", "utf8"); + +const config = Object.fromEntries( + raw + .split("\n") + .map(l => l.trim()) + .filter(l => l && !l.startsWith("#")) + .map(l => { + const [k, ...v] = l.split("="); + return [k.trim(), parseValue(v.join("="))]; + }) +); + +export const CLIENT_ID = config.CLIENT_ID ?? "bot_permanente"; +export const BOT_PREFIX = config.BOT_PREFIX ?? "🤖 *ManyBot:* "; +export const CMD_PREFIX = config.CMD_PREFIX ?? "!"; +export const CHATS = config.CHATS ?? []; \ No newline at end of file diff --git a/update b/update new file mode 100644 index 0000000..0d962bc --- /dev/null +++ b/update @@ -0,0 +1,141 @@ +#!/bin/bash +# ============================================================================== +# update.sh — Script de atualização segura do ManyBot +# ============================================================================== + +set -euo pipefail + +# ------------------------------------------------------------------------------ +# Configuração +# ------------------------------------------------------------------------------ +dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +tmp_dir="$dir/tmp" +log_file="$dir/update.log" +config_items=(".wwebjs_auth" ".wwebjs_cache" "node_modules") + +# ------------------------------------------------------------------------------ +# Logging +# ------------------------------------------------------------------------------ +log() { + local level="$1"; shift + local msg="$*" + local timestamp + timestamp="$(date '+%Y-%m-%d %H:%M:%S')" + echo "[$timestamp] [$level] $msg" | tee -a "$log_file" +} + +# ------------------------------------------------------------------------------ +# Trap: executa em caso de qualquer erro +# ------------------------------------------------------------------------------ +cleanup_on_error() { + local exit_code=$? + log "ERROR" "Falha durante a atualização (código: $exit_code)." + if [ -d "$tmp_dir" ] && [ "$(ls -A "$tmp_dir" 2>/dev/null)" ]; then + log "WARN" "Arquivos de configuração preservados em: $tmp_dir" + log "WARN" "Restaure manualmente com: mv $tmp_dir/* $dir/" + fi + exit $exit_code +} +trap cleanup_on_error ERR + +# ------------------------------------------------------------------------------ +# Validações iniciais +# ------------------------------------------------------------------------------ +log "INFO" "Iniciando atualização do ManyBot..." + +# Verifica dependências obrigatórias +for cmd in git npm; do + if ! command -v "$cmd" &>/dev/null; then + log "ERROR" "Dependência ausente: '$cmd' não encontrado no PATH." + exit 1 + fi +done + +# Verifica se está em um repositório git +if ! git -C "$dir" rev-parse --is-inside-work-tree &>/dev/null; then + log "ERROR" "'$dir' não é um repositório git." + exit 1 +fi + +# Exibe o remote para transparência +remote_url=$(git -C "$dir" remote get-url origin 2>/dev/null || echo "(não definido)") +log "INFO" "Remote: $remote_url" + +# Verifica se há alterações locais não commitadas +if ! git -C "$dir" diff --quiet || ! git -C "$dir" diff --cached --quiet; then + log "WARN" "Existem alterações locais não commitadas. Elas serão descartadas pelo reset." + read -r -p "Deseja continuar mesmo assim? [s/N] " confirm + confirm="${confirm:-N}" + if [[ ! "$confirm" =~ ^[sS]$ ]]; then + log "INFO" "Atualização cancelada pelo usuário." + exit 0 + fi +fi + +# ------------------------------------------------------------------------------ +# Backup dos arquivos de configuração +# ------------------------------------------------------------------------------ +rm -rf "$tmp_dir" +mkdir -p "$tmp_dir" + +backed_up=() +for item in "${config_items[@]}"; do + src="$dir/$item" + if [ -e "$src" ]; then + mv "$src" "$tmp_dir/" + backed_up+=("$item") + log "INFO" "Backup: $item → tmp/" + fi +done + +# ------------------------------------------------------------------------------ +# Atualização do repositório +# ------------------------------------------------------------------------------ +log "INFO" "Buscando atualizações..." +git -C "$dir" fetch origin + +branch=$(git -C "$dir" rev-parse --abbrev-ref HEAD) +log "INFO" "Branch atual: $branch" + +# Registra o hash antes e depois para auditoria +hash_before=$(git -C "$dir" rev-parse HEAD) +git -C "$dir" reset --hard "origin/$branch" +hash_after=$(git -C "$dir" rev-parse HEAD) + +if [ "$hash_before" = "$hash_after" ]; then + log "INFO" "Repositório já estava atualizado (sem mudanças)." +else + log "INFO" "Atualizado: $hash_before → $hash_after" +fi + +# ------------------------------------------------------------------------------ +# Instalação de dependências +# ------------------------------------------------------------------------------ +log "INFO" "Instalando dependências..." +npm ci --omit=dev 2>&1 | tee -a "$log_file" + +# ------------------------------------------------------------------------------ +# Restauração dos arquivos de configuração +# ------------------------------------------------------------------------------ +if [ ${#backed_up[@]} -gt 0 ]; then + for item in "${backed_up[@]}"; do + src="$tmp_dir/$item" + dst="$dir/$item" + if [ -e "$src" ]; then + # Remove o que npm possa ter criado (ex: node_modules) + rm -rf "$dst" + mv "$src" "$dst" + log "INFO" "Restaurado: $item" + else + log "WARN" "Item esperado no backup não encontrado: $item" + fi + done +fi + +# Limpa tmp apenas após restauração bem-sucedida +rm -rf "$tmp_dir" + +# ------------------------------------------------------------------------------ +# Concluído +# ------------------------------------------------------------------------------ +log "INFO" "ManyBot atualizado com sucesso." \ No newline at end of file