4 min read

LangBot: Build AI Chatbots for Discord, Telegram, Slack and WeChat (GitHub, Scanned)

A self-hosted platform for AI chatbots on Discord, Telegram, Slack, WeChat, QQ and more.

LangBot logo
✅
Scan: safe. Nothing malicious. The notes: the pinned ChromaDB version has critical advisories, and connecting a personal QQ or WeChat account goes through third-party bridges rather than an official bot API. Scanned Oct 26, 2026; the full report is below.

LangBot connects large language models to chat apps. Set it up once and the same bot can answer on Discord, Telegram, Slack, LINE, Matrix, DingTalk, Lark, KOOK, QQ, WeCom and WeChat, with multi-turn conversations, tool calling, images, streaming replies and a built-in knowledge base for answering from your own documents.

Everything is managed from a web panel rather than config files. You pick a model from OpenAI, Anthropic, Gemini, DeepSeek, Ollama, LM Studio and many others, or hand conversations to a Dify, Coze, n8n or Langflow workflow, then add access control, rate limits and word filters. A plugin system with hundreds of plugins, MCP support and a built-in MCP endpoint let you extend it or have a coding agent manage it.

It is Apache-2.0, with about 18,500 stars and 116 contributors, at v4.11.2 when scanned. It is especially strong on Chinese platforms, and parts of the documentation are Chinese first. A hosted LangBot Cloud exists if you would rather not run it yourself.

  • Repository: github.com/langbot-app/LangBot
  • Licence: Apache-2.0 (Apache License 2.0)
  • Language: Python. Stars: 18.5K. Forks: 1,668. Last push: Oct 26, 2026.
  • Scan: safe, Oct 26, 2026, commit 1d3c47c

Who it is for

Community managers who want an AI helper in their Discord or Telegram group, companies putting a support bot on Slack, WeCom or Lark, and developers who want one bot backend for several chat apps.

Getting started

1. Run it with uv, then open http://localhost:5300

uvx langbot

2. Or run it with Docker Compose

git clone https://github.com/langbot-app/LangBot && cd LangBot/docker && docker compose --profile all up -d

uvx needs uv installed first. Each chat platform needs its own bot token or app credentials, set up in the web panel.

Safety scan

We cloned langbot-app/LangBot at commit 1d3c47c on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no suspicious patterns and no committed binaries across 2,343 files and about 550,000 lines of Python and TypeScript. The two bare-IP URLs use 192.0.2.10, a reserved documentation address, in an OAuth test.
  • 11 known advisories (2 critical, 5 high). The critical ones are in chromadb 1.5.9, pinned in uv.lock and used for the knowledge base, so update when a fixed release is available and do not expose the database separately. The rest are in the web panel's lockfiles.
  • skills/package.json runs a bootstrap script on prepare, which only affects people developing the bundled agent skills. docker/deploy-k8s-test.sh is a Kubernetes test helper and uses no sudo.
  • 15 workflows; the only pull_request_target one is the CLA assistant, which carries a comment forbidding checkouts and never runs PR code. 1 of 22 third-party actions pinned to a commit. Dependabot is on; no security policy file.
  • Bots on personal QQ and WeChat accounts are not an official use of those platforms. Check the terms before connecting an account you care about.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious codeNone found.
Install-time code1 npm lifecycle script. 2 installer scripts
Committed binariesNone.
CI workflows15 workflows. 1 uses pull_request_target, none check out the pull request head. 21 of 22 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often langbot.app, example.test, space.langbot.app, github.com. 2 URLs to a bare IP address, listed under the raw findings.
Known vulnerabilities11 advisories across 1,161 pinned packages: 2 critical, 5 high, 2 moderate, 2 low. uv.lock: 287 packages, 7 advisories; web/package-lock.json: 771 packages, 4 advisories; web/pnpm-lock.yaml: 681 packages, 2 advisories.
Project hygieneHas automated dependency updates, licence file, contributing guide. Missing security policy, CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

URLs to bare IP addresses (2)
WhereRuleMatch
tests/integration/api/test_user_space_oauth.py:202ip-literal-url'https://192.0.2.10/auth/space/callback',
tests/integration/api/test_user_space_oauth.py:207ip-literal-url'http://192.0.2.10:5300/auth/space/callback',
npm lifecycle scripts (1)
  • skills/package.json prepare: node scripts/bootstrap-lbs.mjs
Installer scripts (2)
Worst known vulnerabilities (11 of 11)
AdvisorySeverityPackageSummary
GHSA-36p7-vc44-83pfcriticalchromadb@1.5.9ChromaDB has a code injection vulnerability
GHSA-f4j7-r4q5-qw2ccriticalchromadb@1.5.9ChromaDB Python project has a pre-authentication code injection vulnerability
GHSA-2wm9-hf6c-p5crhighchromadb@1.5.9ChromaDB allows any authenticated users to arbitrarily read, write, update, or delete data in any tenant's collection
GHSA-xph7-9rjv-w5frhighchromadb@1.5.9ChromaDB's SimpleRBACAuthorizationProvider doesn't check which tenant, database, or collection a permission applies to
GHSA-v4x8-3wr5-3wq8highfilelock@3.32.7filelock ReadWriteLock: SQLite reopens the lock database by name, so a planted symlink or journal file makes the lock us…
GHSA-23c5-xmqv-rm74highminimatch@3.1.3minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions
GHSA-mrhx-c7xc-m3w5highzod@3.25.76Zod can exhaust memory while validating oversized constrained collections
GHSA-2g4f-4pwh-qvx6moderateajv@6.12.6ajv has ReDoS when using `$data` option
GHSA-48c2-rrv3-qjmpmoderateyaml@2.8.2yaml is vulnerable to Stack Overflow via deeply nested YAML collections
GHSA-567q-5qvw-pf92lowfilelock@3.32.7filelock: On Windows an oplock on a soft lock's marker holds SoftFileLock.acquire() past its timeout and blocks the stal…
GHSA-9vhv-jxww-xfm5lowfilelock@3.32.7filelock: ReadWriteLock on Windows acts on SQLite side files another local user places beside its database
Workflows worth a look

By the numbers

Stars18.5K
Forks1,668
Contributors116
Commits4,648
Open issues119
Open pull requests24
Releases216
Latest releasev4.11.2
LicenceApache-2.0
Main languagePython
Project age3 years
Last pushOct 26, 2026
Tracked files2,343
Lines of code550.4K
Checkout size29 MB

Lines by language: Python 318.3K, TypeScript 146.2K, Markdown 28K, JavaScript 22.9K, JSON 17.7K, YAML 14.7K.

Questions

Is LangBot free?

Yes. LangBot is Apache-2.0 and free to self-host. You pay your model provider per token, or nothing with Ollama or LM Studio. LangBot Cloud is the project's hosted option.

Which chat apps does LangBot support?

Discord, Telegram, Slack, LINE, Matrix, KOOK, Lark, DingTalk, WeCom, WeChat and QQ, plus Satori. Matrix bridges extend it further, to Signal, WhatsApp and others.

Can LangBot answer from my own documents?

Yes. It has a built-in knowledge base for retrieval, and it can also hand conversations to Dify, Coze, n8n or Langflow if you already have a workflow there.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.