bot-mwsm 3.0.4 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,6 +22,7 @@ on:
22
22
  - "style.css"
23
23
  - "version.json"
24
24
  - "mwsm.py"
25
+ - "Dockerfile"
25
26
  release:
26
27
  types: [published, edited]
27
28
  workflow_dispatch:
@@ -33,7 +34,6 @@ concurrency:
33
34
  jobs:
34
35
  sync:
35
36
  runs-on: ubuntu-latest
36
- # evita loops criados pelo próprio bot
37
37
  if: ${{ !startsWith(github.event.head_commit.message, '🔄 Bot-Mwsm') }}
38
38
 
39
39
  steps:
@@ -54,21 +54,27 @@ jobs:
54
54
  echo "📂 Verificando arquivos modificados..."
55
55
  git fetch origin main --no-tags
56
56
 
57
- # lidar com repositório com apenas 1 commit ou em runners onde HEAD^ pode não existir
58
57
  if git rev-parse --verify HEAD^ >/dev/null 2>&1; then
59
58
  CHANGED_FILES=$(git diff --name-only HEAD^ HEAD || echo "")
60
59
  else
61
- # fallback: usa a lista de arquivos do último commit
62
60
  CHANGED_FILES=$(git diff --name-only HEAD || git ls-files)
63
61
  fi
64
62
 
65
63
  echo "$CHANGED_FILES"
64
+
65
+ # Detectar alterações no DB e no Dockerfile
66
66
  if echo "$CHANGED_FILES" | grep -q "mwsm.db"; then
67
67
  echo "DB_CHANGED=true" >> "$GITHUB_OUTPUT"
68
68
  else
69
69
  echo "DB_CHANGED=false" >> "$GITHUB_OUTPUT"
70
70
  fi
71
71
 
72
+ if echo "$CHANGED_FILES" | grep -q "Dockerfile"; then
73
+ echo "DOCKERFILE_CHANGED=true" >> "$GITHUB_OUTPUT"
74
+ else
75
+ echo "DOCKERFILE_CHANGED=false" >> "$GITHUB_OUTPUT"
76
+ fi
77
+
72
78
  - name: 🔢 Atualizar version.json e package.json (sincroniza com último release e calcula incremento)
73
79
  id: version
74
80
  env:
@@ -120,7 +126,6 @@ jobs:
120
126
  jq --arg v "$NEW_VER" --arg d "$PATCH" \
121
127
  '.version[0].release=$v | .version[0].patch=$d' version.json > version.tmp && mv version.tmp version.json
122
128
 
123
- # normaliza o package.json: força name para 'bot-mwsm' (resolverá o 403 do npm por case)
124
129
  jq --arg v "$NEW_VER" --arg name "bot-mwsm" \
125
130
  '.version=$v | .name=$name' package.json > package.tmp && mv package.tmp package.json
126
131
 
@@ -146,7 +151,6 @@ jobs:
146
151
  git config --global user.name "Bot-Mwsm 🤖"
147
152
  git config --global user.email "143403919+MKCodec@users.noreply.github.com"
148
153
  git config --global commit.gpgsign false
149
-
150
154
  git add README.md package.json version.json || true
151
155
 
152
156
  if git diff --cached --quiet; then
@@ -172,83 +176,43 @@ jobs:
172
176
 
173
177
  - name: 🧩 Verificar autenticação NPM (OIDC ping)
174
178
  run: |
175
- set -e
176
- echo "🔍 Verificando conectividade com registry (OIDC test via npm ping)..."
177
179
  if npm ping >/dev/null 2>&1; then
178
- echo "✅ npm ping ok (pode usar OIDC se configurado)."
180
+ echo "✅ npm ping ok (pode usar OIDC)."
179
181
  else
180
- echo "⚠️ npm ping falhou — verifique Trusted Publisher no npmjs.com."
181
- # não falha aqui; deixamos o publish tentar e fallback por token cuidar do resto
182
+ echo "⚠️ npm ping falhou — tentativa continuará mesmo assim."
182
183
  fi
183
184
 
184
- - name: ⚙️ Setup Node (garante npm atualizado e registry)
185
+ - name: ⚙️ Setup Node
185
186
  uses: actions/setup-node@v4
186
187
  with:
187
188
  node-version: '20'
188
189
  registry-url: 'https://registry.npmjs.org'
189
190
 
190
- - name: 🔍 Mostrar versões antes do publish
191
- run: |
192
- node --version
193
- npm --version
194
- echo "package.json version:" $(jq -r .version package.json)
195
- echo "version.json release:" $(jq -r '.version[0].release // .version' version.json)
196
-
197
- - name: 📦 Publicar no NPM (Trusted Publisher - OIDC)
191
+ - name: 📦 Publicar no NPM (Trusted Publisher)
198
192
  id: publish_oidc
199
193
  continue-on-error: true
200
194
  run: |
201
- set -e
202
- echo "📦 Tentando publicar via OIDC (Trusted Publisher)..."
203
195
  VERSION=$(jq -r '.version[0].release // .version' version.json)
204
- # já normalizamos name e version no passo anterior
205
196
  jq --arg v "$VERSION" '.version=$v' package.json > package.tmp && mv package.tmp package.json
206
-
207
- # instalar dependências caso necessário para build (não deve afetar publish)
208
197
  npm ci --no-audit --no-fund || true
209
-
210
198
  PUBLISHED=$(npm view bot-mwsm version 2>/dev/null || echo "")
211
199
  if [ "$PUBLISHED" = "$VERSION" ]; then
212
- echo "⚠️ Versão $VERSION já está publicada no npm — pulando publish."
200
+ echo "⚠️ Versão $VERSION já publicada — pulando."
213
201
  exit 0
214
202
  fi
215
-
216
- # publish: se trusted publisher estiver configurado no npm, o runner usará OIDC
217
203
  npm publish --provenance --access public
218
204
 
219
- - name: 📦 Fallback publish via NPM_TOKEN (se OIDC falhar)
205
+ - name: 📦 Fallback publish via NPM_TOKEN
220
206
  if: ${{ steps.publish_oidc.outcome == 'failure' }}
221
207
  env:
222
208
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
223
209
  run: |
224
- set -e
225
- echo "⚠️ Publicação via OIDC falhou — tentando fallback com NPM_TOKEN..."
226
- VERSION=$(jq -r '.version[0].release // .version' version.json)
227
-
228
- if [ -z "${NPM_TOKEN:-}" ]; then
229
- echo "❌ NPM_TOKEN não encontrado nas secrets. Aborting."
230
- exit 1
231
- fi
232
-
233
- # configura token para registry
234
210
  npm config set //registry.npmjs.org/:_authToken "${NPM_TOKEN}"
235
-
236
- # re-check published just in case
237
- PUBLISHED=$(npm view bot-mwsm version 2>/dev/null || echo "")
238
- if [ "$PUBLISHED" = "$VERSION" ]; then
239
- echo "⚠️ Versão $VERSION já publicada (detected after fallback check) — nada a fazer."
240
- exit 0
241
- fi
242
-
243
- echo "🔁 Publicando versão $VERSION via token..."
244
- npm publish --access public || {
245
- echo "❌ Falha total no publish, mesmo com fallback."
246
- exit 1
247
- }
248
- echo "✅ Publicação via token concluída com sucesso!"
211
+ VERSION=$(jq -r '.version[0].release // .version' version.json)
212
+ npm publish --access public
249
213
 
250
214
  - name: 🐋 Build & Push Docker Image
251
- if: steps.detect.outputs.DB_CHANGED == 'true'
215
+ if: steps.detect.outputs.DB_CHANGED == 'true' || steps.detect.outputs.DOCKERFILE_CHANGED == 'true'
252
216
  env:
253
217
  DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
254
218
  DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -259,16 +223,15 @@ jobs:
259
223
  VERSION="${{ steps.version.outputs.version }}"
260
224
  IMAGE="${DOCKERHUB_USERNAME}/mwsm"
261
225
 
262
- echo "🔐 Fazendo login no Docker Hub..."
263
226
  echo "${DOCKERHUB_TOKEN}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin
264
227
 
265
- echo "🏗️ Construindo imagem ${IMAGE}:${VERSION}..."
266
228
  docker buildx create --use --name builder || true
267
229
  docker buildx build --platform linux/amd64 \
268
230
  -t "${IMAGE}:${VERSION}" \
269
231
  -t "${IMAGE}:latest" \
232
+ -f Dockerfile \
270
233
  --push .
271
234
 
272
- echo "✅ Imagem publicada com sucesso:"
235
+ echo "✅ Docker atualizado com sucesso:"
273
236
  echo " 🔹 ${IMAGE}:${VERSION}"
274
237
  echo " 🔹 ${IMAGE}:latest"
package/Dockerfile CHANGED
@@ -1,42 +1,100 @@
1
- # ========================================
2
- # 🐋 Mwsm - Ambiente Completo
3
- # ========================================
4
- FROM node:20-bullseye
5
-
6
- # Instalar pacotes do sistema e Python
7
- RUN apt-get update && apt-get install -y \
8
- python3 python3-pip python3-venv sqlite3 git curl wget jq build-essential \
9
- libnss3-dev libgdk-pixbuf2.0-dev libgtk-3-dev libxss-dev libasound2 \
10
- ca-certificates fonts-liberation libappindicator3-1 \
11
- libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
12
- libexpat1 libfontconfig1 libgbm1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 \
13
- libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \
14
- libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 \
15
- libxrender1 libxss1 libxtst6 lsb-release xdg-utils \
16
- && rm -rf /var/lib/apt/lists/*
17
-
18
- # Instalar libs Python
19
- RUN pip3 install --no-cache-dir \
20
- flask==2.2.5 \
21
- sentence-transformers==2.2.2 \
22
- huggingface_hub==0.10.1 \
23
- transformers==4.25.1 \
24
- safetensors==0.3.1
25
-
26
- # Instalar PM2 globalmente
27
- RUN npm install -g pm2@latest
28
-
29
- # Criar diretório do app
1
+ # =========================
2
+ # 🧱 Etapa 1: Builder
3
+ # =========================
4
+ FROM node:20.19.1-bookworm-slim AS builder
5
+
6
+ WORKDIR /var/api/Mwsm
7
+ ENV DEBIAN_FRONTEND=noninteractive
8
+ ENV TZ=America/Sao_Paulo
9
+
10
+ # -----------------------------------------------------------------
11
+ # Instala dependências essenciais + Rust (necessário p/ tokenizers)
12
+ # -----------------------------------------------------------------
13
+ RUN apt-get update && apt-get upgrade -y && \
14
+ apt-get install -y \
15
+ git curl wget unzip build-essential pkg-config \
16
+ python3 python3-dev python3-pip python3-venv \
17
+ rustc cargo \
18
+ chromium chromium-driver \
19
+ sqlite3 jq ca-certificates openssl lsb-release \
20
+ fonts-dejavu fonts-liberation fontconfig locales \
21
+ libgomp1 libopenblas-dev liblapack-dev \
22
+ libxshmfence1 libgbm1 libxkbcommon0 libdrm2 \
23
+ libasound2 libpulse0 \
24
+ libcairo2 libpango1.0-0 libpangocairo-1.0-0 \
25
+ libappindicator3-1 libatk-bridge2.0-0 libatk1.0-0 \
26
+ libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
27
+ libxcursor1 libxdamage1 libxext6 libxfixes3 \
28
+ libxi6 libxrandr2 libxrender1 libxss1 libxtst6 xdg-utils dbus \
29
+ && locale-gen pt_BR.UTF-8 && \
30
+ rm -rf /var/lib/apt/lists/*
31
+
32
+ ENV LANG=pt_BR.UTF-8
33
+ ENV LC_ALL=pt_BR.UTF-8
34
+
35
+ # -----------------------------------------------------------------
36
+ # Clone do repositório (raso)
37
+ # -----------------------------------------------------------------
38
+ RUN git clone --depth 1 https://github.com/MKCodec/Mwsm.git .
39
+
40
+ # -----------------------------------------------------------------
41
+ # Instala dependências Node.js (mantendo versões do package.json)
42
+ # -----------------------------------------------------------------
43
+ RUN npm install --no-audit --no-fund
44
+
45
+ # -----------------------------------------------------------------
46
+ # Ambiente virtual Python com versões fixas
47
+ # -----------------------------------------------------------------
48
+ RUN python3 -m venv /opt/venv && \
49
+ /opt/venv/bin/pip install --upgrade pip && \
50
+ /opt/venv/bin/pip install --no-cache-dir \
51
+ flask==2.2.5 \
52
+ sentence-transformers==2.2.2 \
53
+ huggingface_hub==0.10.1 \
54
+ torch torchvision \
55
+ --extra-index-url https://download.pytorch.org/whl/cpu
56
+
57
+
58
+ # =========================
59
+ # 🚀 Etapa 2: Runtime
60
+ # =========================
61
+ FROM node:20.19.1-bookworm-slim
62
+
30
63
  WORKDIR /var/api/Mwsm
64
+ ENV DEBIAN_FRONTEND=noninteractive
65
+ ENV TZ=America/Sao_Paulo
66
+ ENV LANG=pt_BR.UTF-8
67
+ ENV LC_ALL=pt_BR.UTF-8
68
+ ENV PATH="/opt/venv/bin:$PATH"
31
69
 
32
- # Copiar o projeto local
33
- COPY . .
70
+ # -----------------------------------------------------------------
71
+ # Instala dependências mínimas do runtime
72
+ # -----------------------------------------------------------------
73
+ RUN apt-get update && apt-get install -y --no-install-recommends \
74
+ python3 python3-venv chromium chromium-driver \
75
+ sqlite3 ca-certificates openssl fontconfig locales \
76
+ fonts-dejavu fonts-liberation \
77
+ libgomp1 libopenblas-dev liblapack-dev \
78
+ libxshmfence1 libgbm1 libxkbcommon0 libdrm2 \
79
+ libasound2 libpulse0 libcairo2 libpango1.0-0 \
80
+ libpangocairo-1.0-0 libappindicator3-1 libatk-bridge2.0-0 \
81
+ libatk1.0-0 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
82
+ libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 \
83
+ libxrandr2 libxrender1 libxss1 libxtst6 xdg-utils dbus \
84
+ && locale-gen pt_BR.UTF-8 && \
85
+ ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime && \
86
+ rm -rf /var/lib/apt/lists/*
34
87
 
35
- # Instalar dependências Node
36
- RUN npm install --production
88
+ # -----------------------------------------------------------------
89
+ # Copia ambiente Python e código do builder
90
+ # -----------------------------------------------------------------
91
+ COPY --from=builder /opt/venv /opt/venv
92
+ COPY --from=builder /var/api/Mwsm /var/api/Mwsm
37
93
 
38
- # Expor a porta padrão
39
- EXPOSE 8000
94
+ # -----------------------------------------------------------------
95
+ # PM2 para gerenciar processos
96
+ # -----------------------------------------------------------------
97
+ RUN npm install -g pm2 --silent --no-audit --no-fund
40
98
 
41
- # Iniciar via PM2 (como no Ubuntu real)
42
- CMD ["pm2-runtime", "npm", "--", "run", "setup:mwsm"]
99
+ EXPOSE 8000 5005
100
+ CMD ["pm2-runtime", "start", "mwsm.json"]
package/README.md CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  <p align="center">
4
4
  <a href="javascript:void(0)">
5
- <img src="https://img.shields.io/badge/Build-3.0.4-blue?style=for-the-badge" alt="Badge">
5
+ <img src="https://img.shields.io/badge/Build-3.0.5-blue?style=for-the-badge" alt="Badge">
6
6
  </a>
7
7
  <a href="javascript:void(0)">
8
- <img src="https://img.shields.io/badge/Update-17%2F10%2F2025%2015:00-green?style=for-the-badge" alt="Badge">
8
+ <img src="https://img.shields.io/badge/Update-22%2F10%2F2025%2021:10-green?style=for-the-badge" alt="Badge">
9
9
  </a>
10
10
  <a href="https://github.com/MKCodec/Mwsm">
11
11
  <img src="https://img.shields.io/github/stars/MKCodec/Mwsm?style=for-the-badge" alt="Badge">
@@ -59,24 +59,16 @@ permitindo enviar mensagens, sincronizar cobranças e gerenciar comunicações c
59
59
 
60
60
  ## 🧠 Requisitos
61
61
 
62
- - Servidor Linux (Ubuntu/Proxmox ou Debian/MkAuth)
63
- - [API MkAuth](https://github.com/MKCodec/MkAuth-API) modificada para uso com Mwsm
64
- - Conexão estável com o WhatsApp Web
62
+ **Servidores compatíveis:**
63
+ - 🧩 **MkAuth** (Devuan Beowulf)
64
+ - 🐧 **Debian** 10 / 11 / 12 / **13**
65
+ - 💻 **Ubuntu 20** / 22 / 24
66
+ - 🐋 **Docker**
65
67
 
66
- ---
67
-
68
- ## 📚 Documentação Completa
69
-
70
- Acesse o **Wiki Oficial do Mwsm** e aprenda passo a passo como instalar, configurar e usar:
71
-
72
- > 📘 **Wiki Oficial:**
73
- > [https://github.com/MKCodec/Mwsm/wiki](https://github.com/MKCodec/Mwsm/wiki)
68
+ **Outros requisitos:**
69
+ - [API MkAuth modificada](https://github.com/MKCodec/MkAuth-API) para uso com **Mwsm**
70
+ - Conexão estável com **WhatsApp Web**
74
71
 
75
- ### 🔹 Seções Disponíveis:
76
- - **[Introdução](https://github.com/MKCodec/Mwsm/wiki/Home)** — visão geral e recursos do projeto
77
- - **[Instalação](https://github.com/MKCodec/Mwsm/wiki/Instalação)** — instalação automática e pré-requisitos
78
- - **[Configuração](https://github.com/MKCodec/Mwsm/wiki/Configuração)** — como ajustar e ativar o sistema
79
- - **[Suporte e Integração](https://github.com/MKCodec/Mwsm/wiki/Suporte-e-Intregração)** — integrações externas e testes
80
72
 
81
73
  ---
82
74