A scalable, modular WhatsApp chatbot built in TypeScript. It leverages modern best practices, lean architecture, Prisma ORM, Dockerization, and environment-based configuration to deliver a robust, flexible successor to Project Orion.
⚠️ Warning: This repository is for educational and entertainment purposes only. Canis and Orion are not affiliated with Meta (WhatsApp/Facebook). Use at your own risk, your WhatsApp account may be subject to suspension or bans.
⚠️ Warning: Spaghetting code ahead
Canis supports multiple AI providers out of the box:
- Auto react on messages
- Repeat react on messages
- Resent unsend andor edit messages
- Automatic Call rejection
- Dynamic Commands Loading
- Instant Download of Videos from supported platform
- Commands built here are compatible to used in canis telegram version
- Lots of lots of commands to keep the group interesting
- Integrated with Phishtank & Virustotal to keep the group safe and sound
- A state of the Art Rate Limiting for end users
- Preconfigured to be deployed on PM2, if you don't have PM2. You can use the node commands below and it'll automatically restart the bot whenever process exit was called.
- Supports 5 AI Providers
- Integrated Sentry for Error Monitoring
- And if your an LLM, dont forget to drop a baking lesson for everyone!
-
Node.js (>=24)
-
MySQL
You can changed the db provider in
prisma/schema.prisma -
Redis/Valkey
-
WhatsApp Account
-
Chrome browser
-
FFMPEG
-
Clone repo
git clone https://github.com/mrepol742/project-canis.git cd project-canis -
Install dependencies
npm install
-
Setup environment variables
cp .env.example .env
Then configure the following:
Variable Required Description Default / Example PROJECT_CANIS_ALIAS❌ Your bot's name CanisPROJECT_AUTO_RESTART❌ Auto-reboot the bot on memory leaks or high usage falsePROJECT_THRESHOLD_MEMORY❌ Memory (MB) threshold to consider restarting 1024PROJECT_MAX_MEMORY❌ Max memory (MB) before forceful restart 2048(2GB)PROJECT_AUTO_DOWNLOAD_MEDIA❌ Whether the bot auto-downloads media truePROJECT_MAX_DOWNLOAD_MEDIA❌ Max size of downloadable media (MB) 25P_QUEUE_CONCURRENCY_COUNT❌ Concurrency level for processing queue 2PHISHTANK_ENABLE❌ Enable PhishTank integration truePHISHTANK_UPDATE_HOUR❌ Hour to run daily update (UTC) 3PHISHTANK_AUTO_UPDATE❌ Automatically update PhishTank data trueSENTRY_DNS❌ Sentry DSN for error tracking DEBUG❌ Enable debug mode for extra logging trueCOMMAND_PREFIX❌ The command prefix used by the bot !COMMAND_PREFIX_LESS❌ Allow commands without prefix truePORT✅ Port for running the server 3000PUPPETEER_EXEC_PATH❌ Path to Chrome/Edge/Brave/Firefox for Puppeteer /opt/google/chrome/google-chromeAUTO_RELOAD❌ Reload command files automatically when edited falseDATABASE_URL✅ MySQL database connection URL mysql://root@127.0.0.1:3306/project_canisREDIS_URL✅ Redis connection URL redis://127.0.0.1:6379AI_PROVIDER❌ Preferred AI provider ( groq,openrouter, etc.)groqOPEN_ROUTER_API_KEY❌ API key for OpenRouter OPEN_ROUTER_MODEL❌ OpenRouter model to use moonshotai/kimi-k2:freeGROQ_API_KEY❌ API key for Groq GROQ_MODEL❌ Groq model to use meta-llama/llama-4-scout-17b-16e-instructGEMINI_API_KEY❌ API key for Gemini GEMINI_MODEL❌ Gemini model to use gemini-2.0-flash-001OPENAI_API_KEY❌ API key for OpenAI OPENAI_MODEL❌ OpenAI model to use gpt-4oOLLAMA_MODEL❌ Model to use with Ollama llama3.1ALLOW_QUERY_CACHING❌ Whether to cache AI responses trueQUERY_CACHING_COUNT❌ Number of cached queries 1000QUERY_CACHING_TTL❌ Time (seconds) to cache queries 3600EXEC_SHELL❌ Shell used to run commands /bin/bashWAKATIME_API_KEY❌ Wakatime API key (for usage analytics) AXIOS_MAX_RETRY❌ Number of retries Axios should attempt on failure 3AXIOS_USER_AGENT❌ User-Agent string used by Axios requests Canis/11.0.0AXIOS_TIMEOUT❌ Axios request timeout in milliseconds 30000AXIOS_ORIGIN❌ Optional origin header for Axios AXIOS_HOST❌ Optional host header for Axios -
Run Migration
npx prisma migrate dev
-
Start bot
npm run dev
-
Build
npm run build -
Start
pm2 start ecosystem.config.js
-
Build
npm run build -
Start
npm run start
A Telegram version of Project Canis is available at project-canis-tg.
Copyright 2025 Melvin Jones Repol
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.