Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b74cf2dc5 | ||
|
|
4f5d937265 | ||
|
|
544dc770cd | ||
|
|
5fbe257625 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -7,3 +7,4 @@ node_modules/
|
|||||||
cookies.txt
|
cookies.txt
|
||||||
bin/
|
bin/
|
||||||
mychats.txt
|
mychats.txt
|
||||||
|
manybot.conf
|
||||||
41
README.md
41
README.md
@@ -13,3 +13,44 @@ Algumas funcionalidades desse bot inclui:
|
|||||||
- Ferramenta para pegar IDs dos chats
|
- Ferramenta para pegar IDs dos chats
|
||||||
- Entre outros
|
- 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
|
||||||
|
|||||||
11
deploy.sh
11
deploy.sh
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# development tool
|
# ferramenta de desenvolvimento apenas, pode apagar se quiser
|
||||||
# ./deploy <commit> <branch> <version (if branch=master)>
|
# ./deploy <commit> <branch> <version (if branch=master)>
|
||||||
|
|
||||||
COMMIT_MSG="$1"
|
COMMIT_MSG="$1"
|
||||||
@@ -12,15 +12,6 @@ if [ -z "$COMMIT_MSG" ] || [ -z "$BRANCH" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
# mudar para a branch
|
||||||
git checkout $BRANCH || { echo "Error ao change to $BRANCH"; exit 1; }
|
git checkout $BRANCH || { echo "Error ao change to $BRANCH"; exit 1; }
|
||||||
|
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "whatsapp-bot",
|
"name": "whatsapp-bot",
|
||||||
"version": "2.3.1",
|
"version": "2.3.3",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "whatsapp-bot",
|
"name": "whatsapp-bot",
|
||||||
"version": "2.3.1",
|
"version": "2.3.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"node-addon-api": "^7",
|
"node-addon-api": "^7",
|
||||||
"node-gyp": "^12.2.0",
|
"node-gyp": "^12.2.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "manybot",
|
"name": "manybot",
|
||||||
"version": "2.3.1",
|
"version": "2.3.3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"node-addon-api": "^7",
|
"node-addon-api": "^7",
|
||||||
|
|||||||
28
setup
28
setup
@@ -1,6 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# Salvando diretório para evitar problemas
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
# ------------------------
|
# ------------------------
|
||||||
# Cores
|
# Cores
|
||||||
# ------------------------
|
# ------------------------
|
||||||
@@ -48,8 +51,6 @@ cat << "EOF"
|
|||||||
website: www.mlplovers.com.br/manybot
|
website: www.mlplovers.com.br/manybot
|
||||||
repo: github.com/synt-xerror/manybot
|
repo: github.com/synt-xerror/manybot
|
||||||
|
|
||||||
A Amizade é Mágica!
|
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
echo -e "${RESET}"
|
echo -e "${RESET}"
|
||||||
}
|
}
|
||||||
@@ -190,6 +191,27 @@ fi
|
|||||||
|
|
||||||
log_debug "Total de arquivos para baixar: ${#files[@]}"
|
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
|
# Download
|
||||||
# ------------------------
|
# ------------------------
|
||||||
@@ -201,4 +223,4 @@ for file in "${files[@]}"; do
|
|||||||
download_file "$url" "$dest"
|
download_file "$url" "$dest"
|
||||||
done
|
done
|
||||||
|
|
||||||
log_ok "Setup concluído com sucesso"
|
log_ok "Setup concluído com sucesso.\nRode sempre na raíz: 'node src/main.js' (ou equivalente) para rodar o bot."
|
||||||
@@ -21,7 +21,7 @@ const DOWNLOADS_DIR = path.resolve("downloads");
|
|||||||
const FFMPEG = os.platform() === "win32" ? ".\\bin\\ffmpeg.exe" : "./bin/ffmpeg";
|
const FFMPEG = os.platform() === "win32" ? ".\\bin\\ffmpeg.exe" : "./bin/ffmpeg";
|
||||||
const MAX_STICKER_SIZE = 900 * 1024;
|
const MAX_STICKER_SIZE = 900 * 1024;
|
||||||
const SESSION_TIMEOUT = 2 * 60 * 1000;
|
const SESSION_TIMEOUT = 2 * 60 * 1000;
|
||||||
const MAX_MEDIA = 10;
|
const MAX_MEDIA = 30;
|
||||||
|
|
||||||
// ── Helpers ───────────────────────────────────────────────────
|
// ── Helpers ───────────────────────────────────────────────────
|
||||||
function ensureDownloadsDir() {
|
function ensureDownloadsDir() {
|
||||||
|
|||||||
@@ -1,5 +1,34 @@
|
|||||||
export const CLIENT_ID = "bot_permanente";
|
import fs from "fs";
|
||||||
export const BOT_PREFIX = "🤖 *ManyBot:* ";
|
|
||||||
export const CHATS = [
|
function parseValue(v) {
|
||||||
// coloque os chats que quer aqui
|
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 ?? [];
|
||||||
141
update
Normal file
141
update
Normal file
@@ -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."
|
||||||
Reference in New Issue
Block a user