{"id":41876123,"url":"https://github.com/mkuznets/jeepity","last_synced_at":"2026-01-25T12:35:26.962Z","repository":{"id":167353466,"uuid":"620577924","full_name":"mkuznets/jeepity","owner":"mkuznets","description":"Telegram Bot for OpenAI GPT Models","archived":false,"fork":false,"pushed_at":"2024-12-14T02:41:47.000Z","size":190,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-14T03:23:31.767Z","etag":null,"topics":["ai","chatgpt","go","golang","openai","self-hosted","telegram","telegram-bot"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkuznets.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-29T00:47:38.000Z","updated_at":"2024-12-14T02:41:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"87b3716e-5181-41ea-9ac3-1fa3d09aba6c","html_url":"https://github.com/mkuznets/jeepity","commit_stats":null,"previous_names":["mkuznets/jeepity"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mkuznets/jeepity","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkuznets%2Fjeepity","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkuznets%2Fjeepity/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkuznets%2Fjeepity/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkuznets%2Fjeepity/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkuznets","download_url":"https://codeload.github.com/mkuznets/jeepity/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkuznets%2Fjeepity/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28753063,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T10:25:12.305Z","status":"ssl_error","status_checked_at":"2026-01-25T10:25:11.933Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","chatgpt","go","golang","openai","self-hosted","telegram","telegram-bot"],"created_at":"2026-01-25T12:35:26.044Z","updated_at":"2026-01-25T12:35:26.950Z","avatar_url":"https://github.com/mkuznets.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jeepity\n\nJeepity is a Telegram bot powered by [OpenAI](https://openai.com) GPT large language models.\n\n* **AI chatbot.** Interact with GPT 3.5/4 models in a private chat. The bot brings a ChatGPT-like experience to\n  Telegram: it keeps\n  the context of the conversation, displays the responses word-by-word as they are generated, and supports Markdown.\n  messages.\n* **Voice message transcription.** Forward someone else's voice message to the bot, and it will be transcribed using\n  the [OpenAI Whisper](https://openai.com/research/whisper) model.\n  You can also talk to the chatbot via voice messages: the transcriptions will be sent to the language model.\n* **Localisation.** Buttons, menus, and system messages are available in English and Russian. The language is\n  selected automatically based on the Telegram interface language.\n* **Easy to self-host.** The bot compiles into a single binary and is also available as a Docker\n  container. Check out the [tutorial](#deploying-to-flyio) on how to get it up and running in minutes\n  on [fly.io](https://fly.io)!\n\n## Quick Start\n\n### Docker\n\n* Create a file named `.env` with the configuration (see [Configuration](#configuration))\n* Run `docker run --env-file .env ghcr.io/mkuznets/jeepity:latest`\n\n### Docker Compose\n\n* Copy the provided [compose.yml](compose.yaml)\n* Customise the environment variables (see [Configuration](#configuration))\n    * You can set them in the shell environment, in a `.env` file, or directly in the compose.yaml. See\n      the [documentation](https://docs.docker.com/compose/environment-variables/set-environment-variables/) for more\n      details.\n* Run `docker-compose up`\n\n### From Source\n\n```shell\n# Requires Go 1.19+\n$ go install github.com/mkuznets/jeepity/cmd/jeepity@latest\n$ jeepity run --help\n```\n\n### Pre-Built Binaries\n\n\u003e Coming soon!\n\n## Configuration\n\nJeepity can be configured using environment variables\n(recommended), .env file, or CLI arguments.\nCheck `jeepity run --help` to see the list of available options.\n\n```dotenv\n## Required\n\n# OpenAI API key (https://platform.openai.com/account/api-keys)\nOPENAI_TOKEN=sk-...\n# Telegram bot token (https://core.telegram.org/bots#how-do-i-create-a-bot)\nTELEGRAM_BOT_TOKEN=\n# Local directory used to store the bot's database\nDATA_DIR=./data\n\n## Optional, uncomment if needed.\n\n## Customise the chat completion model (default: gpt-3.5-turbo-0301)\n#OPENAI_CHAT_MODEL=gpt-4-0314\n\n## Customise the audio transcription model (default: whisper-1)\n#OPENAI_AUDIO_MODEL=whisper-1\n\n## Customise the password used to encrypt chat messages.\n## If not set, the messages will still be encrypted with an empty password.\n#DATA_ENCRYPTION_PASSWORD=\n\n## Enable receiving updates via webhook\n#TELEGRAM_MODE=webhook\n#\n## Internal listen address of the webhook\n#TELEGRAM_WEBHOOK_ADDR=:8080\n#\n## Publicly accessible URL of the webhook\n#TELEGRAM_WEBHOOK_URL=\n#\n## Secret password to verify webhook updates\n#TELEGRAM_WEBHOOK_SECRET=\n```\n\n## Usage\n\n### Access\n\nTo avoid abuse and excessive OpenAI API bills, access to the bot is invite-only. Every bot user can run the `/invite`\ncommand to get a shareable access link that looks like this:\n\n```\nhttps://t.me/\u003cusername\u003e?start=\u003ccode\u003e\n```\n\nOpening the link is equivalent to running the `/start \u003ccode\u003e` command manually (the link may not always work on\nmobile devices).\n\nWhen you run Jeepity for the first time, use the URL/code printed in the logs to get the access:\n\n```\ntime=... level=DEBUG msg=\"Starting Telegram bot...\"\ntime=... level=INFO msg=\"Invite URL: https://t.me/\u003cusername\u003e?start=\u003ccode\u003e\"\n```\n\nNote that it is regenerated every time you restart the app, do not share it publicly!\n\n### Chatbot\n\nUse the private chat with the bot to talk to the language model. The bot will keep the context of the conversation\nuntil:\n\n* you run the `/reset` command to start a new conversation,\n* there are no new messages for 1 hour,\n* or the context exceeds the limit of the language model (you will be prompted to reset the conversation).\n\n### Voice Message Transcription\n\nWhen you forward someone else's voice message to the bot, it will be transcribed using the OpenAI Whisper model. You can\nalso record you own voice message to the bot, in which case the transcription will be part of the chatbot conversation.\n\nNote that forwarding a voice message from the \"Saved Messages\" chat will count as a newly recorded message, and will\ntrigger the chatbot response.\n\n## Self-Hosting\n\nSome operational details:\n\n* The Telegram bot uses long-polling, so you do not need to expose it to the internet and set up a webhook.\n* Jeepity emits structured key-value logs to stderr. The is either human-readable [logfmt](https://brandur.org/logfmt)\n  or JSON, depending on whether the shell session is interactive.\n* Jeepity gracefully handles SIGTERM and SIGINT: it stops accepting new requests, waits for the ongoing requests to\n  finish, and only then shuts down. You can force the shutdown by sending one or two extra SIGTERM/SIGINT.\n* The data (users, chat history, etc.) is stored in a local SQLite database at `DATA_DIR`.\n* The messages are encrypted with AES using the configured password (`DATA_ENCRYPTION_PASSWORD`) and a\n  random per-user salt. When a conversation is reset (either manually or automatically), the messages are deleted.\n\n## Deploying to fly.io\n\n\u003e I am not affiliated with fly.io in any way, just geniunely excited about how easy it is to deploy Jeepity there.\n\n[Fly.io](https://fly.io) is a Platform as a Service where most of the resources (apps, machines, volumes, etc.) are\ncontrolled using a command-line tool ([flyctl](https://fly.io/docs/flyctl)).\nHowever, with their new [Web CLI](https://community.fly.io/t/introducing-fly-io-terminal/10464) you do not even need to\ninstall anything!\n\nJeepity works perfectly on their smallest instances (shared-cpu-1x 256mb) included in the free allowance (as long as you\nare eligible for it).\n\nFollow these steps to spin up a new app running Jeepity:\n\n1. Obtain an [OpenAI API key](https://platform.openai.com/account/api-keys) and\n   a [Telegram bot token](https://core.telegram.org/bots#how-do-i-create-a-bot).\n2. [Create a fly.io account](https://fly.io/app/sign-up).\n3. Go to [fly.io/terminal](https://fly.io/terminal) and click \"Launch Web CLI\".\n4. Run the following commands, one by one:\n\n```shell\n# Download the app template\ncurl -fsSL https://raw.githubusercontent.com/mkuznets/jeepity/master/template.fly.toml \u003efly.toml\n\n# Create a fly app with an auto-generated name\nfly launch --generate-name --copy-config --force-machines --no-deploy\n\n# Create a 1GB volume to store the bot's database\nfly volumes create --region lhr --size 1 --yes jeepity_data\n```\n\n5. Configure Jeepity by running `fly secrets import`. The command should hang waiting for your input. Paste the\n   following text (fill the token values from step 1) and press Ctrl+D:\n\n```dotenv\nOPENAI_TOKEN=...\nTELEGRAM_BOT_TOKEN=...\n```\n\n6. Run `fly deploy` to start the deploy.\n7. Go to the \"Watch your app\" URL. You should see something like this:\n\n```dotenv\n[info]{\"time\":\"...\",\"level\":\"DEBUG\",\"msg\":\"Starting Telegram bot...\"}\n[info]{\"time\":\"...\",\"level\":\"INFO\",\"msg\":\"Invite URL: https://t.me/\u003cusername\u003e?start=\u003ccode\u003e\"}\n[info]{\"time\":\"...\",\"level\":\"INFO\",\"msg\":\"(This URL is temporary, DO NOT SHARE IT WITH ANYONE)\"}\n```\n\n8. The bot is up and running! Go to the invite URL to start using the bot!\n\n## License\n\nJeepity is released under the MIT License. See the [LICENSE](LICENSE) file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkuznets%2Fjeepity","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkuznets%2Fjeepity","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkuznets%2Fjeepity/lists"}