@builderbot/cli 1.0.28-alpha.0 → 1.0.30-alpha.0

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.
Files changed (227) hide show
  1. package/dist/index.cjs +1797 -1883
  2. package/dist/starters/apps/base-js-baileys-json/Dockerfile +24 -15
  3. package/dist/starters/apps/base-js-baileys-json/README.md +1 -1
  4. package/dist/starters/apps/base-js-baileys-json/package.json +2 -3
  5. package/dist/starters/apps/base-js-baileys-json/src/app.js +111 -110
  6. package/dist/starters/apps/base-js-baileys-memory/Dockerfile +24 -15
  7. package/dist/starters/apps/base-js-baileys-memory/README.md +1 -1
  8. package/dist/starters/apps/base-js-baileys-memory/package.json +2 -3
  9. package/dist/starters/apps/base-js-baileys-memory/src/app.js +111 -110
  10. package/dist/starters/apps/base-js-baileys-mongo/Dockerfile +24 -15
  11. package/dist/starters/apps/base-js-baileys-mongo/README.md +1 -1
  12. package/dist/starters/apps/base-js-baileys-mongo/package.json +2 -3
  13. package/dist/starters/apps/base-js-baileys-mongo/src/app.js +111 -110
  14. package/dist/starters/apps/base-js-baileys-mysql/Dockerfile +24 -15
  15. package/dist/starters/apps/base-js-baileys-mysql/README.md +1 -1
  16. package/dist/starters/apps/base-js-baileys-mysql/package.json +2 -3
  17. package/dist/starters/apps/base-js-baileys-mysql/src/app.js +111 -110
  18. package/dist/starters/apps/base-js-baileys-postgres/Dockerfile +24 -15
  19. package/dist/starters/apps/base-js-baileys-postgres/README.md +1 -1
  20. package/dist/starters/apps/base-js-baileys-postgres/package.json +2 -3
  21. package/dist/starters/apps/base-js-baileys-postgres/src/app.js +111 -110
  22. package/dist/starters/apps/base-js-meta-json/Dockerfile +24 -15
  23. package/dist/starters/apps/base-js-meta-json/README.md +1 -1
  24. package/dist/starters/apps/base-js-meta-json/package.json +2 -3
  25. package/dist/starters/apps/base-js-meta-json/src/app.js +111 -110
  26. package/dist/starters/apps/base-js-meta-memory/Dockerfile +24 -15
  27. package/dist/starters/apps/base-js-meta-memory/README.md +1 -1
  28. package/dist/starters/apps/base-js-meta-memory/package.json +2 -3
  29. package/dist/starters/apps/base-js-meta-memory/src/app.js +111 -110
  30. package/dist/starters/apps/base-js-meta-mongo/Dockerfile +24 -15
  31. package/dist/starters/apps/base-js-meta-mongo/README.md +1 -1
  32. package/dist/starters/apps/base-js-meta-mongo/package.json +2 -3
  33. package/dist/starters/apps/base-js-meta-mongo/src/app.js +111 -110
  34. package/dist/starters/apps/base-js-meta-mysql/Dockerfile +24 -15
  35. package/dist/starters/apps/base-js-meta-mysql/README.md +1 -1
  36. package/dist/starters/apps/base-js-meta-mysql/package.json +2 -3
  37. package/dist/starters/apps/base-js-meta-mysql/src/app.js +111 -110
  38. package/dist/starters/apps/base-js-meta-postgres/Dockerfile +24 -15
  39. package/dist/starters/apps/base-js-meta-postgres/README.md +1 -1
  40. package/dist/starters/apps/base-js-meta-postgres/package.json +2 -3
  41. package/dist/starters/apps/base-js-meta-postgres/src/app.js +111 -110
  42. package/dist/starters/apps/base-js-twilio-json/Dockerfile +24 -15
  43. package/dist/starters/apps/base-js-twilio-json/README.md +1 -1
  44. package/dist/starters/apps/base-js-twilio-json/package.json +2 -3
  45. package/dist/starters/apps/base-js-twilio-json/src/app.js +111 -110
  46. package/dist/starters/apps/base-js-twilio-memory/Dockerfile +24 -15
  47. package/dist/starters/apps/base-js-twilio-memory/README.md +1 -1
  48. package/dist/starters/apps/base-js-twilio-memory/package.json +2 -3
  49. package/dist/starters/apps/base-js-twilio-memory/src/app.js +111 -110
  50. package/dist/starters/apps/base-js-twilio-mongo/Dockerfile +24 -15
  51. package/dist/starters/apps/base-js-twilio-mongo/README.md +1 -1
  52. package/dist/starters/apps/base-js-twilio-mongo/package.json +2 -3
  53. package/dist/starters/apps/base-js-twilio-mongo/src/app.js +111 -110
  54. package/dist/starters/apps/base-js-twilio-mysql/Dockerfile +24 -15
  55. package/dist/starters/apps/base-js-twilio-mysql/README.md +1 -1
  56. package/dist/starters/apps/base-js-twilio-mysql/package.json +2 -3
  57. package/dist/starters/apps/base-js-twilio-mysql/src/app.js +111 -110
  58. package/dist/starters/apps/base-js-twilio-postgres/Dockerfile +24 -15
  59. package/dist/starters/apps/base-js-twilio-postgres/README.md +1 -1
  60. package/dist/starters/apps/base-js-twilio-postgres/package.json +2 -3
  61. package/dist/starters/apps/base-js-twilio-postgres/src/app.js +111 -110
  62. package/dist/starters/apps/base-js-venom-json/Dockerfile +24 -15
  63. package/dist/starters/apps/base-js-venom-json/README.md +1 -1
  64. package/dist/starters/apps/base-js-venom-json/package.json +2 -3
  65. package/dist/starters/apps/base-js-venom-json/src/app.js +111 -110
  66. package/dist/starters/apps/base-js-venom-memory/Dockerfile +24 -15
  67. package/dist/starters/apps/base-js-venom-memory/README.md +1 -1
  68. package/dist/starters/apps/base-js-venom-memory/package.json +2 -3
  69. package/dist/starters/apps/base-js-venom-memory/src/app.js +111 -110
  70. package/dist/starters/apps/base-js-venom-mongo/Dockerfile +24 -15
  71. package/dist/starters/apps/base-js-venom-mongo/README.md +1 -1
  72. package/dist/starters/apps/base-js-venom-mongo/package.json +2 -3
  73. package/dist/starters/apps/base-js-venom-mongo/src/app.js +111 -110
  74. package/dist/starters/apps/base-js-venom-mysql/Dockerfile +24 -15
  75. package/dist/starters/apps/base-js-venom-mysql/README.md +1 -1
  76. package/dist/starters/apps/base-js-venom-mysql/package.json +2 -3
  77. package/dist/starters/apps/base-js-venom-mysql/src/app.js +111 -110
  78. package/dist/starters/apps/base-js-venom-postgres/Dockerfile +24 -15
  79. package/dist/starters/apps/base-js-venom-postgres/README.md +1 -1
  80. package/dist/starters/apps/base-js-venom-postgres/package.json +2 -3
  81. package/dist/starters/apps/base-js-venom-postgres/src/app.js +111 -110
  82. package/dist/starters/apps/base-js-wppconnect-json/Dockerfile +24 -15
  83. package/dist/starters/apps/base-js-wppconnect-json/README.md +1 -1
  84. package/dist/starters/apps/base-js-wppconnect-json/package.json +2 -3
  85. package/dist/starters/apps/base-js-wppconnect-json/src/app.js +111 -110
  86. package/dist/starters/apps/base-js-wppconnect-memory/Dockerfile +24 -15
  87. package/dist/starters/apps/base-js-wppconnect-memory/README.md +1 -1
  88. package/dist/starters/apps/base-js-wppconnect-memory/package.json +2 -3
  89. package/dist/starters/apps/base-js-wppconnect-memory/src/app.js +111 -110
  90. package/dist/starters/apps/base-js-wppconnect-mongo/Dockerfile +24 -15
  91. package/dist/starters/apps/base-js-wppconnect-mongo/README.md +1 -1
  92. package/dist/starters/apps/base-js-wppconnect-mongo/package.json +2 -3
  93. package/dist/starters/apps/base-js-wppconnect-mongo/src/app.js +111 -110
  94. package/dist/starters/apps/base-js-wppconnect-mysql/Dockerfile +24 -15
  95. package/dist/starters/apps/base-js-wppconnect-mysql/README.md +1 -1
  96. package/dist/starters/apps/base-js-wppconnect-mysql/package.json +2 -3
  97. package/dist/starters/apps/base-js-wppconnect-mysql/src/app.js +111 -110
  98. package/dist/starters/apps/base-js-wppconnect-postgres/Dockerfile +24 -15
  99. package/dist/starters/apps/base-js-wppconnect-postgres/README.md +1 -1
  100. package/dist/starters/apps/base-js-wppconnect-postgres/package.json +2 -3
  101. package/dist/starters/apps/base-js-wppconnect-postgres/src/app.js +111 -110
  102. package/dist/starters/apps/base-ts-baileys-json/Dockerfile +26 -15
  103. package/dist/starters/apps/base-ts-baileys-json/README.md +1 -1
  104. package/dist/starters/apps/base-ts-baileys-json/package.json +1 -1
  105. package/dist/starters/apps/base-ts-baileys-json/rollup.config.js +11 -11
  106. package/dist/starters/apps/base-ts-baileys-json/src/app.ts +111 -111
  107. package/dist/starters/apps/base-ts-baileys-memory/Dockerfile +26 -15
  108. package/dist/starters/apps/base-ts-baileys-memory/README.md +1 -1
  109. package/dist/starters/apps/base-ts-baileys-memory/package.json +1 -1
  110. package/dist/starters/apps/base-ts-baileys-memory/rollup.config.js +11 -11
  111. package/dist/starters/apps/base-ts-baileys-memory/src/app.ts +111 -111
  112. package/dist/starters/apps/base-ts-baileys-mongo/Dockerfile +26 -15
  113. package/dist/starters/apps/base-ts-baileys-mongo/README.md +1 -1
  114. package/dist/starters/apps/base-ts-baileys-mongo/package.json +1 -1
  115. package/dist/starters/apps/base-ts-baileys-mongo/rollup.config.js +11 -11
  116. package/dist/starters/apps/base-ts-baileys-mongo/src/app.ts +111 -111
  117. package/dist/starters/apps/base-ts-baileys-mysql/Dockerfile +26 -15
  118. package/dist/starters/apps/base-ts-baileys-mysql/README.md +1 -1
  119. package/dist/starters/apps/base-ts-baileys-mysql/package.json +1 -1
  120. package/dist/starters/apps/base-ts-baileys-mysql/rollup.config.js +11 -11
  121. package/dist/starters/apps/base-ts-baileys-mysql/src/app.ts +111 -111
  122. package/dist/starters/apps/base-ts-baileys-postgres/Dockerfile +26 -15
  123. package/dist/starters/apps/base-ts-baileys-postgres/README.md +1 -1
  124. package/dist/starters/apps/base-ts-baileys-postgres/package.json +1 -1
  125. package/dist/starters/apps/base-ts-baileys-postgres/rollup.config.js +11 -11
  126. package/dist/starters/apps/base-ts-baileys-postgres/src/app.ts +111 -111
  127. package/dist/starters/apps/base-ts-meta-json/Dockerfile +26 -15
  128. package/dist/starters/apps/base-ts-meta-json/README.md +1 -1
  129. package/dist/starters/apps/base-ts-meta-json/package.json +1 -1
  130. package/dist/starters/apps/base-ts-meta-json/rollup.config.js +11 -11
  131. package/dist/starters/apps/base-ts-meta-json/src/app.ts +111 -111
  132. package/dist/starters/apps/base-ts-meta-memory/Dockerfile +26 -15
  133. package/dist/starters/apps/base-ts-meta-memory/README.md +1 -1
  134. package/dist/starters/apps/base-ts-meta-memory/package.json +1 -1
  135. package/dist/starters/apps/base-ts-meta-memory/rollup.config.js +11 -11
  136. package/dist/starters/apps/base-ts-meta-memory/src/app.ts +111 -111
  137. package/dist/starters/apps/base-ts-meta-mongo/Dockerfile +26 -15
  138. package/dist/starters/apps/base-ts-meta-mongo/README.md +1 -1
  139. package/dist/starters/apps/base-ts-meta-mongo/package.json +1 -1
  140. package/dist/starters/apps/base-ts-meta-mongo/rollup.config.js +11 -11
  141. package/dist/starters/apps/base-ts-meta-mongo/src/app.ts +111 -111
  142. package/dist/starters/apps/base-ts-meta-mysql/Dockerfile +26 -15
  143. package/dist/starters/apps/base-ts-meta-mysql/README.md +1 -1
  144. package/dist/starters/apps/base-ts-meta-mysql/package.json +1 -1
  145. package/dist/starters/apps/base-ts-meta-mysql/rollup.config.js +11 -11
  146. package/dist/starters/apps/base-ts-meta-mysql/src/app.ts +111 -111
  147. package/dist/starters/apps/base-ts-meta-postgres/Dockerfile +26 -15
  148. package/dist/starters/apps/base-ts-meta-postgres/README.md +1 -1
  149. package/dist/starters/apps/base-ts-meta-postgres/package.json +1 -1
  150. package/dist/starters/apps/base-ts-meta-postgres/rollup.config.js +11 -11
  151. package/dist/starters/apps/base-ts-meta-postgres/src/app.ts +111 -111
  152. package/dist/starters/apps/base-ts-twilio-json/Dockerfile +26 -15
  153. package/dist/starters/apps/base-ts-twilio-json/README.md +1 -1
  154. package/dist/starters/apps/base-ts-twilio-json/package.json +1 -1
  155. package/dist/starters/apps/base-ts-twilio-json/rollup.config.js +11 -11
  156. package/dist/starters/apps/base-ts-twilio-json/src/app.ts +111 -111
  157. package/dist/starters/apps/base-ts-twilio-memory/Dockerfile +26 -15
  158. package/dist/starters/apps/base-ts-twilio-memory/README.md +1 -1
  159. package/dist/starters/apps/base-ts-twilio-memory/package.json +1 -1
  160. package/dist/starters/apps/base-ts-twilio-memory/rollup.config.js +11 -11
  161. package/dist/starters/apps/base-ts-twilio-memory/src/app.ts +111 -111
  162. package/dist/starters/apps/base-ts-twilio-mongo/Dockerfile +26 -15
  163. package/dist/starters/apps/base-ts-twilio-mongo/README.md +1 -1
  164. package/dist/starters/apps/base-ts-twilio-mongo/package.json +1 -1
  165. package/dist/starters/apps/base-ts-twilio-mongo/rollup.config.js +11 -11
  166. package/dist/starters/apps/base-ts-twilio-mongo/src/app.ts +111 -111
  167. package/dist/starters/apps/base-ts-twilio-mysql/Dockerfile +26 -15
  168. package/dist/starters/apps/base-ts-twilio-mysql/README.md +1 -1
  169. package/dist/starters/apps/base-ts-twilio-mysql/package.json +1 -1
  170. package/dist/starters/apps/base-ts-twilio-mysql/rollup.config.js +11 -11
  171. package/dist/starters/apps/base-ts-twilio-mysql/src/app.ts +111 -111
  172. package/dist/starters/apps/base-ts-twilio-postgres/Dockerfile +26 -15
  173. package/dist/starters/apps/base-ts-twilio-postgres/README.md +1 -1
  174. package/dist/starters/apps/base-ts-twilio-postgres/package.json +1 -1
  175. package/dist/starters/apps/base-ts-twilio-postgres/rollup.config.js +11 -11
  176. package/dist/starters/apps/base-ts-twilio-postgres/src/app.ts +111 -111
  177. package/dist/starters/apps/base-ts-venom-json/Dockerfile +26 -15
  178. package/dist/starters/apps/base-ts-venom-json/README.md +1 -1
  179. package/dist/starters/apps/base-ts-venom-json/package.json +1 -1
  180. package/dist/starters/apps/base-ts-venom-json/rollup.config.js +11 -11
  181. package/dist/starters/apps/base-ts-venom-json/src/app.ts +111 -111
  182. package/dist/starters/apps/base-ts-venom-memory/Dockerfile +26 -15
  183. package/dist/starters/apps/base-ts-venom-memory/README.md +1 -1
  184. package/dist/starters/apps/base-ts-venom-memory/package.json +1 -1
  185. package/dist/starters/apps/base-ts-venom-memory/rollup.config.js +11 -11
  186. package/dist/starters/apps/base-ts-venom-memory/src/app.ts +111 -111
  187. package/dist/starters/apps/base-ts-venom-mongo/Dockerfile +26 -15
  188. package/dist/starters/apps/base-ts-venom-mongo/README.md +1 -1
  189. package/dist/starters/apps/base-ts-venom-mongo/package.json +1 -1
  190. package/dist/starters/apps/base-ts-venom-mongo/rollup.config.js +11 -11
  191. package/dist/starters/apps/base-ts-venom-mongo/src/app.ts +111 -111
  192. package/dist/starters/apps/base-ts-venom-mysql/Dockerfile +26 -15
  193. package/dist/starters/apps/base-ts-venom-mysql/README.md +1 -1
  194. package/dist/starters/apps/base-ts-venom-mysql/package.json +1 -1
  195. package/dist/starters/apps/base-ts-venom-mysql/rollup.config.js +11 -11
  196. package/dist/starters/apps/base-ts-venom-mysql/src/app.ts +111 -111
  197. package/dist/starters/apps/base-ts-venom-postgres/Dockerfile +26 -15
  198. package/dist/starters/apps/base-ts-venom-postgres/README.md +1 -1
  199. package/dist/starters/apps/base-ts-venom-postgres/package.json +1 -1
  200. package/dist/starters/apps/base-ts-venom-postgres/rollup.config.js +11 -11
  201. package/dist/starters/apps/base-ts-venom-postgres/src/app.ts +111 -111
  202. package/dist/starters/apps/base-ts-wppconnect-json/Dockerfile +26 -15
  203. package/dist/starters/apps/base-ts-wppconnect-json/README.md +1 -1
  204. package/dist/starters/apps/base-ts-wppconnect-json/package.json +1 -1
  205. package/dist/starters/apps/base-ts-wppconnect-json/rollup.config.js +11 -11
  206. package/dist/starters/apps/base-ts-wppconnect-json/src/app.ts +111 -111
  207. package/dist/starters/apps/base-ts-wppconnect-memory/Dockerfile +26 -15
  208. package/dist/starters/apps/base-ts-wppconnect-memory/README.md +1 -1
  209. package/dist/starters/apps/base-ts-wppconnect-memory/package.json +1 -1
  210. package/dist/starters/apps/base-ts-wppconnect-memory/rollup.config.js +11 -11
  211. package/dist/starters/apps/base-ts-wppconnect-memory/src/app.ts +111 -111
  212. package/dist/starters/apps/base-ts-wppconnect-mongo/Dockerfile +26 -15
  213. package/dist/starters/apps/base-ts-wppconnect-mongo/README.md +1 -1
  214. package/dist/starters/apps/base-ts-wppconnect-mongo/package.json +1 -1
  215. package/dist/starters/apps/base-ts-wppconnect-mongo/rollup.config.js +11 -11
  216. package/dist/starters/apps/base-ts-wppconnect-mongo/src/app.ts +111 -111
  217. package/dist/starters/apps/base-ts-wppconnect-mysql/Dockerfile +26 -15
  218. package/dist/starters/apps/base-ts-wppconnect-mysql/README.md +1 -1
  219. package/dist/starters/apps/base-ts-wppconnect-mysql/package.json +1 -1
  220. package/dist/starters/apps/base-ts-wppconnect-mysql/rollup.config.js +11 -11
  221. package/dist/starters/apps/base-ts-wppconnect-mysql/src/app.ts +111 -111
  222. package/dist/starters/apps/base-ts-wppconnect-postgres/Dockerfile +26 -15
  223. package/dist/starters/apps/base-ts-wppconnect-postgres/README.md +1 -1
  224. package/dist/starters/apps/base-ts-wppconnect-postgres/package.json +1 -1
  225. package/dist/starters/apps/base-ts-wppconnect-postgres/rollup.config.js +11 -11
  226. package/dist/starters/apps/base-ts-wppconnect-postgres/src/app.ts +111 -111
  227. package/package.json +2 -2
@@ -1,28 +1,37 @@
1
+ # Image size ~ 330MB
1
2
  FROM node:21-alpine3.18 as builder
2
3
 
4
+ WORKDIR /app
5
+
3
6
  RUN corepack enable && corepack prepare pnpm@latest --activate
4
7
  ENV PNPM_HOME=/usr/local/bin
5
8
 
6
- WORKDIR /app
7
-
8
- COPY package*.json pnpm-lock.yaml ./
9
+ COPY . .
9
10
 
10
- RUN apk add --no-cache \
11
- git
11
+ COPY package*.json *-lock.yaml ./
12
12
 
13
- # RUN pnpm install pm2 -g
13
+ RUN apk add --no-cache --virtual .gyp \
14
+ python3 \
15
+ make \
16
+ g++ \
17
+ && apk add --no-cache git \
18
+ && pnpm install \
19
+ && apk del .gyp
14
20
 
15
- COPY . .
16
- RUN pnpm i
21
+ FROM node:21-alpine3.18 as deploy
17
22
 
18
- FROM builder as deploy
23
+ WORKDIR /app
19
24
 
20
- ARG RAILWAY_STATIC_URL
21
- ARG PUBLIC_URL
22
25
  ARG PORT
23
- COPY --from=builder /app/src ./src
24
- COPY --from=builder /app/package.json /app/pnpm-lock.yaml ./
26
+ ENV PORT $PORT
27
+ EXPOSE $PORT
28
+
29
+ COPY --from=builder /app .
30
+
31
+ RUN corepack enable && corepack prepare pnpm@latest --activate
32
+ ENV PNPM_HOME=/usr/local/bin
33
+
34
+ RUN npm cache clean --force && pnpm install --frozen-lockfile --production --ignore-scripts \
35
+ && rm -rf $PNPM_HOME/.npm $PNPM_HOME/.node-gyp
25
36
 
26
- RUN pnpm install --frozen-lockfile --production
27
- # CMD ["pm2-runtime", "start", "./src/app.js", "--cron", "0 */12 * * *"]
28
37
  CMD ["npm", "start"]
@@ -1,7 +1,7 @@
1
1
  <p align="center">
2
2
  <a href="https://builderbot.vercel.app/">
3
3
  <picture>
4
- <img src="https://i.imgur.com/OPl026Z.png" height="80">
4
+ <img src="https://builderbot.vercel.app/assets/thumbnail-vector.png" height="80">
5
5
  </picture>
6
6
  <h2 align="center">BuilderBot</h2>
7
7
  </a>
@@ -6,7 +6,7 @@
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "lint": "eslint . --no-ignore",
9
- "dev": "npm run lint && nodemon ./src/app.js",
9
+ "dev": "node --no-warnings --watch-path=./src ./src/app.js",
10
10
  "start": "node ./src/app.js"
11
11
  },
12
12
  "keywords": [],
@@ -17,8 +17,7 @@
17
17
  },
18
18
  "devDependencies": {
19
19
  "eslint-plugin-builderbot": "latest",
20
- "eslint": "^8.57.0",
21
- "nodemon": "^3.1.0"
20
+ "eslint": "^8.57.0"
22
21
  },
23
22
  "author": "",
24
23
  "license": "ISC"
@@ -1,118 +1,119 @@
1
- import { createBot, createProvider, createFlow, addKeyword, utils } from '@builderbot/bot'
1
+ import { join } from 'path'
2
+ import { createBot, createProvider, createFlow, addKeyword, utils } from '@builderbot/bot'
2
3
  import { JsonFileDB as Database } from '@builderbot/database-json'
3
4
  import { TwilioProvider as Provider } from '@builderbot/provider-twilio'
4
-
5
- const PORT = process.env.PORT ?? 3008
6
-
7
- const discordFlow = addKeyword('doc').addAnswer(
8
- ['You can see the documentation here', '📄 https://builderbot.app/docs \n', 'Do you want to continue? *yes*'].join(
9
- '\n'
10
- ),
11
- { capture: true },
12
- async (ctx, { gotoFlow, flowDynamic }) => {
13
- if (ctx.body.toLocaleLowerCase().includes('yes')) {
14
- return gotoFlow(registerFlow)
15
- }
16
- await flowDynamic('Thanks!')
17
- return
18
- }
19
- )
20
-
21
- const welcomeFlow = addKeyword(['hi', 'hello', 'hola'])
22
- .addAnswer(`🙌 Hello welcome to this *Chatbot*`)
23
- .addAnswer(
24
- [
25
- 'I share with you the following links of interest about the project',
26
- '👉 *doc* to view the documentation',
27
- ].join('\n'),
28
- { delay: 800, capture: true },
29
- async (ctx, { fallBack }) => {
30
- if (!ctx.body.toLocaleLowerCase().includes('doc')) {
31
- return fallBack('You should type *doc*')
32
- }
33
- return
34
- },
35
- [discordFlow]
36
- )
37
-
38
- const registerFlow = addKeyword(utils.setEvent('REGISTER_FLOW'))
39
- .addAnswer(`What is your name?`, { capture: true }, async (ctx, { state }) => {
40
- await state.update({ name: ctx.body })
41
- })
42
- .addAnswer('What is your age?', { capture: true }, async (ctx, { state }) => {
43
- await state.update({ age: ctx.body })
44
- })
45
- .addAction(async (_, { flowDynamic, state }) => {
46
- await flowDynamic(`${state.get('name')}, thanks for your information!: Your age: ${state.get('age')}`)
47
- })
48
-
49
- const fullSamplesFlow = addKeyword(['samples', utils.setEvent('SAMPLES')])
50
- .addAnswer(`💪 I'll send you a lot files...`)
51
- .addAnswer(`Send image from Local`, { media: join(process.cwd(), 'assets', 'sample.png') })
52
- .addAnswer(`Send video from URL`, {
53
- media: 'https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYTJ0ZGdjd2syeXAwMjQ4aWdkcW04OWlqcXI3Ynh1ODkwZ25zZWZ1dCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/LCohAb657pSdHv0Q5h/giphy.mp4',
54
- })
55
- .addAnswer(`Send audio from URL`, { media: 'https://cdn.freesound.org/previews/728/728142_11861866-lq.mp3' })
56
- .addAnswer(`Send file from URL`, {
57
- media: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
58
- })
59
-
60
- const main = async () => {
61
- const adapterFlow = createFlow([welcomeFlow, registerFlow, fullSamplesFlow])
5
+
6
+ const PORT = process.env.PORT ?? 3008
7
+
8
+ const discordFlow = addKeyword('doc').addAnswer(
9
+ ['You can see the documentation here', '📄 https://builderbot.app/docs \n', 'Do you want to continue? *yes*'].join(
10
+ '\n'
11
+ ),
12
+ { capture: true },
13
+ async (ctx, { gotoFlow, flowDynamic }) => {
14
+ if (ctx.body.toLocaleLowerCase().includes('yes')) {
15
+ return gotoFlow(registerFlow)
16
+ }
17
+ await flowDynamic('Thanks!')
18
+ return
19
+ }
20
+ )
21
+
22
+ const welcomeFlow = addKeyword(['hi', 'hello', 'hola'])
23
+ .addAnswer(`🙌 Hello welcome to this *Chatbot*`)
24
+ .addAnswer(
25
+ [
26
+ 'I share with you the following links of interest about the project',
27
+ '👉 *doc* to view the documentation',
28
+ ].join('\n'),
29
+ { delay: 800, capture: true },
30
+ async (ctx, { fallBack }) => {
31
+ if (!ctx.body.toLocaleLowerCase().includes('doc')) {
32
+ return fallBack('You should type *doc*')
33
+ }
34
+ return
35
+ },
36
+ [discordFlow]
37
+ )
38
+
39
+ const registerFlow = addKeyword(utils.setEvent('REGISTER_FLOW'))
40
+ .addAnswer(`What is your name?`, { capture: true }, async (ctx, { state }) => {
41
+ await state.update({ name: ctx.body })
42
+ })
43
+ .addAnswer('What is your age?', { capture: true }, async (ctx, { state }) => {
44
+ await state.update({ age: ctx.body })
45
+ })
46
+ .addAction(async (_, { flowDynamic, state }) => {
47
+ await flowDynamic(`${state.get('name')}, thanks for your information!: Your age: ${state.get('age')}`)
48
+ })
49
+
50
+ const fullSamplesFlow = addKeyword(['samples', utils.setEvent('SAMPLES')])
51
+ .addAnswer(`💪 I'll send you a lot files...`)
52
+ .addAnswer(`Send image from Local`, { media: join(process.cwd(), 'assets', 'sample.png') })
53
+ .addAnswer(`Send video from URL`, {
54
+ media: 'https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYTJ0ZGdjd2syeXAwMjQ4aWdkcW04OWlqcXI3Ynh1ODkwZ25zZWZ1dCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/LCohAb657pSdHv0Q5h/giphy.mp4',
55
+ })
56
+ .addAnswer(`Send audio from URL`, { media: 'https://cdn.freesound.org/previews/728/728142_11861866-lq.mp3' })
57
+ .addAnswer(`Send file from URL`, {
58
+ media: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
59
+ })
60
+
61
+ const main = async () => {
62
+ const adapterFlow = createFlow([welcomeFlow, registerFlow, fullSamplesFlow])
62
63
  const adapterProvider = createProvider(Provider, {
63
64
  accountSid: 'YOUR_ACCOUNT_SID',
64
65
  authToken: 'YOUR_ACCOUNT_TOKEN',
65
66
  vendorNumber: '+14100000000',
66
- })
67
+ })
67
68
 
68
69
  const adapterDB = new Database({ filename: 'db.json' })
69
-
70
- const { handleCtx, httpServer } = await createBot({
71
- flow: adapterFlow,
72
- provider: adapterProvider,
73
- database: adapterDB,
74
- })
75
-
76
- adapterProvider.server.post(
77
- '/v1/messages',
78
- handleCtx(async (bot, req, res) => {
79
- const { number, message, urlMedia } = req.body
80
- await bot.sendMessage(number, message, { media: urlMedia ?? null })
81
- return res.end('sended')
82
- })
83
- )
84
-
85
- adapterProvider.server.post(
86
- '/v1/register',
87
- handleCtx(async (bot, req, res) => {
88
- const { number, name } = req.body
89
- await bot.dispatch('REGISTER_FLOW', { from: number, name })
90
- return res.end('trigger')
91
- })
92
- )
93
-
94
- adapterProvider.server.post(
95
- '/v1/samples',
96
- handleCtx(async (bot, req, res) => {
97
- const { number, name } = req.body
98
- await bot.dispatch('SAMPLES', { from: number, name })
99
- return res.end('trigger')
100
- })
101
- )
102
-
103
- adapterProvider.server.post(
104
- '/v1/blacklist',
105
- handleCtx(async (bot, req, res) => {
106
- const { number, intent } = req.body
107
- if (intent === 'remove') bot.blacklist.remove(number)
108
- if (intent === 'add') bot.blacklist.add(number)
109
-
110
- res.writeHead(200, { 'Content-Type': 'application/json' })
111
- return res.end(JSON.stringify({ status: 'ok', number, intent }))
112
- })
113
- )
114
-
115
- httpServer(+PORT)
116
- }
117
-
118
- main()
70
+
71
+ const { handleCtx, httpServer } = await createBot({
72
+ flow: adapterFlow,
73
+ provider: adapterProvider,
74
+ database: adapterDB,
75
+ })
76
+
77
+ adapterProvider.server.post(
78
+ '/v1/messages',
79
+ handleCtx(async (bot, req, res) => {
80
+ const { number, message, urlMedia } = req.body
81
+ await bot.sendMessage(number, message, { media: urlMedia ?? null })
82
+ return res.end('sended')
83
+ })
84
+ )
85
+
86
+ adapterProvider.server.post(
87
+ '/v1/register',
88
+ handleCtx(async (bot, req, res) => {
89
+ const { number, name } = req.body
90
+ await bot.dispatch('REGISTER_FLOW', { from: number, name })
91
+ return res.end('trigger')
92
+ })
93
+ )
94
+
95
+ adapterProvider.server.post(
96
+ '/v1/samples',
97
+ handleCtx(async (bot, req, res) => {
98
+ const { number, name } = req.body
99
+ await bot.dispatch('SAMPLES', { from: number, name })
100
+ return res.end('trigger')
101
+ })
102
+ )
103
+
104
+ adapterProvider.server.post(
105
+ '/v1/blacklist',
106
+ handleCtx(async (bot, req, res) => {
107
+ const { number, intent } = req.body
108
+ if (intent === 'remove') bot.blacklist.remove(number)
109
+ if (intent === 'add') bot.blacklist.add(number)
110
+
111
+ res.writeHead(200, { 'Content-Type': 'application/json' })
112
+ return res.end(JSON.stringify({ status: 'ok', number, intent }))
113
+ })
114
+ )
115
+
116
+ httpServer(+PORT)
117
+ }
118
+
119
+ main()
@@ -1,28 +1,37 @@
1
+ # Image size ~ 330MB
1
2
  FROM node:21-alpine3.18 as builder
2
3
 
4
+ WORKDIR /app
5
+
3
6
  RUN corepack enable && corepack prepare pnpm@latest --activate
4
7
  ENV PNPM_HOME=/usr/local/bin
5
8
 
6
- WORKDIR /app
7
-
8
- COPY package*.json pnpm-lock.yaml ./
9
+ COPY . .
9
10
 
10
- RUN apk add --no-cache \
11
- git
11
+ COPY package*.json *-lock.yaml ./
12
12
 
13
- # RUN pnpm install pm2 -g
13
+ RUN apk add --no-cache --virtual .gyp \
14
+ python3 \
15
+ make \
16
+ g++ \
17
+ && apk add --no-cache git \
18
+ && pnpm install \
19
+ && apk del .gyp
14
20
 
15
- COPY . .
16
- RUN pnpm i
21
+ FROM node:21-alpine3.18 as deploy
17
22
 
18
- FROM builder as deploy
23
+ WORKDIR /app
19
24
 
20
- ARG RAILWAY_STATIC_URL
21
- ARG PUBLIC_URL
22
25
  ARG PORT
23
- COPY --from=builder /app/src ./src
24
- COPY --from=builder /app/package.json /app/pnpm-lock.yaml ./
26
+ ENV PORT $PORT
27
+ EXPOSE $PORT
28
+
29
+ COPY --from=builder /app .
30
+
31
+ RUN corepack enable && corepack prepare pnpm@latest --activate
32
+ ENV PNPM_HOME=/usr/local/bin
33
+
34
+ RUN npm cache clean --force && pnpm install --frozen-lockfile --production --ignore-scripts \
35
+ && rm -rf $PNPM_HOME/.npm $PNPM_HOME/.node-gyp
25
36
 
26
- RUN pnpm install --frozen-lockfile --production
27
- # CMD ["pm2-runtime", "start", "./src/app.js", "--cron", "0 */12 * * *"]
28
37
  CMD ["npm", "start"]
@@ -1,7 +1,7 @@
1
1
  <p align="center">
2
2
  <a href="https://builderbot.vercel.app/">
3
3
  <picture>
4
- <img src="https://i.imgur.com/OPl026Z.png" height="80">
4
+ <img src="https://builderbot.vercel.app/assets/thumbnail-vector.png" height="80">
5
5
  </picture>
6
6
  <h2 align="center">BuilderBot</h2>
7
7
  </a>
@@ -6,7 +6,7 @@
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "lint": "eslint . --no-ignore",
9
- "dev": "npm run lint && nodemon ./src/app.js",
9
+ "dev": "node --no-warnings --watch-path=./src ./src/app.js",
10
10
  "start": "node ./src/app.js"
11
11
  },
12
12
  "keywords": [],
@@ -16,8 +16,7 @@
16
16
  },
17
17
  "devDependencies": {
18
18
  "eslint-plugin-builderbot": "latest",
19
- "eslint": "^8.57.0",
20
- "nodemon": "^3.1.0"
19
+ "eslint": "^8.57.0"
21
20
  },
22
21
  "author": "",
23
22
  "license": "ISC"
@@ -1,117 +1,118 @@
1
- import { createBot, createProvider, createFlow, addKeyword, utils } from '@builderbot/bot'
1
+ import { join } from 'path'
2
+ import { createBot, createProvider, createFlow, addKeyword, utils } from '@builderbot/bot'
2
3
  import { MemoryDB as Database } from '@builderbot/bot'
3
4
  import { TwilioProvider as Provider } from '@builderbot/provider-twilio'
4
-
5
- const PORT = process.env.PORT ?? 3008
6
-
7
- const discordFlow = addKeyword('doc').addAnswer(
8
- ['You can see the documentation here', '📄 https://builderbot.app/docs \n', 'Do you want to continue? *yes*'].join(
9
- '\n'
10
- ),
11
- { capture: true },
12
- async (ctx, { gotoFlow, flowDynamic }) => {
13
- if (ctx.body.toLocaleLowerCase().includes('yes')) {
14
- return gotoFlow(registerFlow)
15
- }
16
- await flowDynamic('Thanks!')
17
- return
18
- }
19
- )
20
-
21
- const welcomeFlow = addKeyword(['hi', 'hello', 'hola'])
22
- .addAnswer(`🙌 Hello welcome to this *Chatbot*`)
23
- .addAnswer(
24
- [
25
- 'I share with you the following links of interest about the project',
26
- '👉 *doc* to view the documentation',
27
- ].join('\n'),
28
- { delay: 800, capture: true },
29
- async (ctx, { fallBack }) => {
30
- if (!ctx.body.toLocaleLowerCase().includes('doc')) {
31
- return fallBack('You should type *doc*')
32
- }
33
- return
34
- },
35
- [discordFlow]
36
- )
37
-
38
- const registerFlow = addKeyword(utils.setEvent('REGISTER_FLOW'))
39
- .addAnswer(`What is your name?`, { capture: true }, async (ctx, { state }) => {
40
- await state.update({ name: ctx.body })
41
- })
42
- .addAnswer('What is your age?', { capture: true }, async (ctx, { state }) => {
43
- await state.update({ age: ctx.body })
44
- })
45
- .addAction(async (_, { flowDynamic, state }) => {
46
- await flowDynamic(`${state.get('name')}, thanks for your information!: Your age: ${state.get('age')}`)
47
- })
48
-
49
- const fullSamplesFlow = addKeyword(['samples', utils.setEvent('SAMPLES')])
50
- .addAnswer(`💪 I'll send you a lot files...`)
51
- .addAnswer(`Send image from Local`, { media: join(process.cwd(), 'assets', 'sample.png') })
52
- .addAnswer(`Send video from URL`, {
53
- media: 'https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYTJ0ZGdjd2syeXAwMjQ4aWdkcW04OWlqcXI3Ynh1ODkwZ25zZWZ1dCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/LCohAb657pSdHv0Q5h/giphy.mp4',
54
- })
55
- .addAnswer(`Send audio from URL`, { media: 'https://cdn.freesound.org/previews/728/728142_11861866-lq.mp3' })
56
- .addAnswer(`Send file from URL`, {
57
- media: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
58
- })
59
-
60
- const main = async () => {
61
- const adapterFlow = createFlow([welcomeFlow, registerFlow, fullSamplesFlow])
5
+
6
+ const PORT = process.env.PORT ?? 3008
7
+
8
+ const discordFlow = addKeyword('doc').addAnswer(
9
+ ['You can see the documentation here', '📄 https://builderbot.app/docs \n', 'Do you want to continue? *yes*'].join(
10
+ '\n'
11
+ ),
12
+ { capture: true },
13
+ async (ctx, { gotoFlow, flowDynamic }) => {
14
+ if (ctx.body.toLocaleLowerCase().includes('yes')) {
15
+ return gotoFlow(registerFlow)
16
+ }
17
+ await flowDynamic('Thanks!')
18
+ return
19
+ }
20
+ )
21
+
22
+ const welcomeFlow = addKeyword(['hi', 'hello', 'hola'])
23
+ .addAnswer(`🙌 Hello welcome to this *Chatbot*`)
24
+ .addAnswer(
25
+ [
26
+ 'I share with you the following links of interest about the project',
27
+ '👉 *doc* to view the documentation',
28
+ ].join('\n'),
29
+ { delay: 800, capture: true },
30
+ async (ctx, { fallBack }) => {
31
+ if (!ctx.body.toLocaleLowerCase().includes('doc')) {
32
+ return fallBack('You should type *doc*')
33
+ }
34
+ return
35
+ },
36
+ [discordFlow]
37
+ )
38
+
39
+ const registerFlow = addKeyword(utils.setEvent('REGISTER_FLOW'))
40
+ .addAnswer(`What is your name?`, { capture: true }, async (ctx, { state }) => {
41
+ await state.update({ name: ctx.body })
42
+ })
43
+ .addAnswer('What is your age?', { capture: true }, async (ctx, { state }) => {
44
+ await state.update({ age: ctx.body })
45
+ })
46
+ .addAction(async (_, { flowDynamic, state }) => {
47
+ await flowDynamic(`${state.get('name')}, thanks for your information!: Your age: ${state.get('age')}`)
48
+ })
49
+
50
+ const fullSamplesFlow = addKeyword(['samples', utils.setEvent('SAMPLES')])
51
+ .addAnswer(`💪 I'll send you a lot files...`)
52
+ .addAnswer(`Send image from Local`, { media: join(process.cwd(), 'assets', 'sample.png') })
53
+ .addAnswer(`Send video from URL`, {
54
+ media: 'https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYTJ0ZGdjd2syeXAwMjQ4aWdkcW04OWlqcXI3Ynh1ODkwZ25zZWZ1dCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/LCohAb657pSdHv0Q5h/giphy.mp4',
55
+ })
56
+ .addAnswer(`Send audio from URL`, { media: 'https://cdn.freesound.org/previews/728/728142_11861866-lq.mp3' })
57
+ .addAnswer(`Send file from URL`, {
58
+ media: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
59
+ })
60
+
61
+ const main = async () => {
62
+ const adapterFlow = createFlow([welcomeFlow, registerFlow, fullSamplesFlow])
62
63
  const adapterProvider = createProvider(Provider, {
63
64
  accountSid: 'YOUR_ACCOUNT_SID',
64
65
  authToken: 'YOUR_ACCOUNT_TOKEN',
65
66
  vendorNumber: '+14100000000',
66
- })
67
+ })
67
68
  const adapterDB = new Database()
68
-
69
- const { handleCtx, httpServer } = await createBot({
70
- flow: adapterFlow,
71
- provider: adapterProvider,
72
- database: adapterDB,
73
- })
74
-
75
- adapterProvider.server.post(
76
- '/v1/messages',
77
- handleCtx(async (bot, req, res) => {
78
- const { number, message, urlMedia } = req.body
79
- await bot.sendMessage(number, message, { media: urlMedia ?? null })
80
- return res.end('sended')
81
- })
82
- )
83
-
84
- adapterProvider.server.post(
85
- '/v1/register',
86
- handleCtx(async (bot, req, res) => {
87
- const { number, name } = req.body
88
- await bot.dispatch('REGISTER_FLOW', { from: number, name })
89
- return res.end('trigger')
90
- })
91
- )
92
-
93
- adapterProvider.server.post(
94
- '/v1/samples',
95
- handleCtx(async (bot, req, res) => {
96
- const { number, name } = req.body
97
- await bot.dispatch('SAMPLES', { from: number, name })
98
- return res.end('trigger')
99
- })
100
- )
101
-
102
- adapterProvider.server.post(
103
- '/v1/blacklist',
104
- handleCtx(async (bot, req, res) => {
105
- const { number, intent } = req.body
106
- if (intent === 'remove') bot.blacklist.remove(number)
107
- if (intent === 'add') bot.blacklist.add(number)
108
-
109
- res.writeHead(200, { 'Content-Type': 'application/json' })
110
- return res.end(JSON.stringify({ status: 'ok', number, intent }))
111
- })
112
- )
113
-
114
- httpServer(+PORT)
115
- }
116
-
117
- main()
69
+
70
+ const { handleCtx, httpServer } = await createBot({
71
+ flow: adapterFlow,
72
+ provider: adapterProvider,
73
+ database: adapterDB,
74
+ })
75
+
76
+ adapterProvider.server.post(
77
+ '/v1/messages',
78
+ handleCtx(async (bot, req, res) => {
79
+ const { number, message, urlMedia } = req.body
80
+ await bot.sendMessage(number, message, { media: urlMedia ?? null })
81
+ return res.end('sended')
82
+ })
83
+ )
84
+
85
+ adapterProvider.server.post(
86
+ '/v1/register',
87
+ handleCtx(async (bot, req, res) => {
88
+ const { number, name } = req.body
89
+ await bot.dispatch('REGISTER_FLOW', { from: number, name })
90
+ return res.end('trigger')
91
+ })
92
+ )
93
+
94
+ adapterProvider.server.post(
95
+ '/v1/samples',
96
+ handleCtx(async (bot, req, res) => {
97
+ const { number, name } = req.body
98
+ await bot.dispatch('SAMPLES', { from: number, name })
99
+ return res.end('trigger')
100
+ })
101
+ )
102
+
103
+ adapterProvider.server.post(
104
+ '/v1/blacklist',
105
+ handleCtx(async (bot, req, res) => {
106
+ const { number, intent } = req.body
107
+ if (intent === 'remove') bot.blacklist.remove(number)
108
+ if (intent === 'add') bot.blacklist.add(number)
109
+
110
+ res.writeHead(200, { 'Content-Type': 'application/json' })
111
+ return res.end(JSON.stringify({ status: 'ok', number, intent }))
112
+ })
113
+ )
114
+
115
+ httpServer(+PORT)
116
+ }
117
+
118
+ main()