• Stars
    star
    1,669
  • Rank 28,006 (Top 0.6 %)
  • Language
    Python
  • License
    GNU General Publi...
  • Created almost 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿค– A Telegram bot that integrates with OpenAI's official ChatGPT APIs to provide answers, written in Python

Note Support for functions (aka plugins) is being added! Check out this discussion for more info and contribute!

ChatGPT Telegram Bot

python-version openai-version license Publish Docker image

A Telegram bot that integrates with OpenAI's official ChatGPT, DALLยทE and Whisper APIs to provide answers. Ready to use with minimal configuration required.

Screenshots

demo

Features

  • Support markdown in answers
  • Reset conversation with the /reset command
  • Typing indicator while generating a response
  • Access can be restricted by specifying a list of allowed users
  • Docker and Proxy support
  • (NEW!) Image generation using DALLยทE via the /image command
  • (NEW!) Transcribe audio and video messages using Whisper (may require ffmpeg)
  • (NEW!) Automatic conversation summary to avoid excessive token usage
  • (NEW!) Track token usage per user - by @AlexHTW
  • (NEW!) Get personal token usage statistics and cost per day/month via the /stats command - by @AlexHTW
  • (NEW!) User budgets and guest budgets - by @AlexHTW
  • (NEW!) Stream support
  • (NEW!) GPT-4 support
    • If you have access to the GPT-4 API, simply change the OPENAI_MODEL parameter to gpt-4
  • (NEW!) Localized bot language
    • Available languages ๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ‡ฉ๐Ÿ‡ช ๐Ÿ‡ท๐Ÿ‡บ ๐Ÿ‡น๐Ÿ‡ท ๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ‡ซ๐Ÿ‡ฎ ๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ‡ฎ๐Ÿ‡ฉ ๐Ÿ‡ณ๐Ÿ‡ฑ ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‡น๐Ÿ‡ผ ๐Ÿ‡ป๐Ÿ‡ณ ๐Ÿ‡ฎ๐Ÿ‡ท ๐Ÿ‡ง๐Ÿ‡ท ๐Ÿ‡บ๐Ÿ‡ฆ
  • (NEW!) Improved inline queries support for group and private chats - by @bugfloyd
    • To use this feature, enable inline queries for your bot in BotFather via the /setinline command

Additional features - help needed!

If you'd like to help, check out the issues section and contribute!
If you want to help with translations, check out the Translations Manual

PRs are always welcome!

Prerequisites

Getting started

Configuration

Customize the configuration by copying .env.example and renaming it to .env, then editing the required parameters as desired:

Parameter Description
OPENAI_API_KEY Your OpenAI API key, you can get it from here
TELEGRAM_BOT_TOKEN Your Telegram bot's token, obtained using BotFather (see tutorial)
ADMIN_USER_IDS Telegram user IDs of admins. These users have access to special admin commands, information and no budget restrictions. Admin IDs don't have to be added to ALLOWED_TELEGRAM_USER_IDS. Note: by default, no admin (-)
ALLOWED_TELEGRAM_USER_IDS A comma-separated list of Telegram user IDs that are allowed to interact with the bot (use getidsbot to find your user ID). Note: by default, everyone is allowed (*)

Optional configuration

The following parameters are optional and can be set in the .env file:

Budgets

Parameter Description Default value
BUDGET_PERIOD Determines the time frame all budgets are applied to. Available periods: daily (resets budget every day), monthly (resets budgets on the first of each month), all-time (never resets budget). See the Budget Manual for more information monthly
USER_BUDGETS A comma-separated list of $-amounts per user from list ALLOWED_TELEGRAM_USER_IDS to set custom usage limit of OpenAI API costs for each. For *- user lists the first USER_BUDGETS value is given to every user. Note: by default, no limits for any user (*). See the Budget Manual for more information *
GUEST_BUDGET $-amount as usage limit for all guest users. Guest users are users in group chats that are not in the ALLOWED_TELEGRAM_USER_IDS list. Value is ignored if no usage limits are set in user budgets (USER_BUDGETS=*). See the Budget Manual for more information 100.0
TOKEN_PRICE $-price per 1000 tokens used to compute cost information in usage statistics. Source: https://openai.com/pricing 0.002
IMAGE_PRICES A comma-separated list with 3 elements of prices for the different image sizes: 256x256, 512x512 and 1024x1024. Source: https://openai.com/pricing 0.016,0.018,0.02
TRANSCRIPTION_PRICE USD-price for one minute of audio transcription. Source: https://openai.com/pricing 0.006

Check out the Budget Manual for possible budget configurations.

Additional optional configuration options

Parameter Description Default value
ENABLE_QUOTING Whether to enable message quoting in private chats true
ENABLE_IMAGE_GENERATION Whether to enable image generation via the /image command true
ENABLE_TRANSCRIPTION Whether to enable transcriptions of audio and video messages true
PROXY Proxy to be used for OpenAI and Telegram bot (e.g. http://localhost:8080) -
OPENAI_MODEL The OpenAI model to use for generating responses. You can find all available models here gpt-3.5-turbo
ASSISTANT_PROMPT A system message that sets the tone and controls the behavior of the assistant You are a helpful assistant.
SHOW_USAGE Whether to show OpenAI token usage information after each response false
STREAM Whether to stream responses. Note: incompatible, if enabled, with N_CHOICES higher than 1 true
MAX_TOKENS Upper bound on how many tokens the ChatGPT API will return 1200 for GPT-3, 2400 for GPT-4
MAX_HISTORY_SIZE Max number of messages to keep in memory, after which the conversation will be summarised to avoid excessive token usage 15
MAX_CONVERSATION_AGE_MINUTES Maximum number of minutes a conversation should live since the last message, after which the conversation will be reset 180
VOICE_REPLY_WITH_TRANSCRIPT_ONLY Whether to answer to voice messages with the transcript only or with a ChatGPT response of the transcript false
VOICE_REPLY_PROMPTS A semicolon separated list of phrases (i.e. Hi bot;Hello chat). If the transcript starts with any of them, it will be treated as a prompt even if VOICE_REPLY_WITH_TRANSCRIPT_ONLY is set to true -
N_CHOICES Number of answers to generate for each input message. Note: setting this to a number higher than 1 will not work properly if STREAM is enabled 1
TEMPERATURE Number between 0 and 2. Higher values will make the output more random 1.0
PRESENCE_PENALTY Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far 0.0
FREQUENCY_PENALTY Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far 0.0
IMAGE_SIZE The DALLยทE generated image size. Allowed values: 256x256, 512x512 or 1024x1024 512x512
GROUP_TRIGGER_KEYWORD If set, the bot in group chats will only respond to messages that start with this keyword -
IGNORE_GROUP_TRANSCRIPTIONS If set to true, the bot will not process transcriptions in group chats true
BOT_LANGUAGE Language of general bot messages. Currently available: en, de, ru, tr, it, fi, es, id, nl, zh-cn, zh-tw, vi, fa, pt-br, uk. Contribute with additional translations en

Check out the official API reference for more details.

Installing

Clone the repository and navigate to the project directory:

git clone https://github.com/n3d1117/chatgpt-telegram-bot.git
cd chatgpt-telegram-bot

From Source

  1. Create a virtual environment:
python -m venv venv
  1. Activate the virtual environment:
# For Linux or macOS:
source venv/bin/activate

# For Windows:
venv\Scripts\activate
  1. Install the dependencies using requirements.txt file:
pip install -r requirements.txt
  1. Use the following command to start the bot:
python bot/main.py

Using Docker Compose

Run the following command to build and run the Docker image:

docker compose up

Ready-to-use Docker images

You can also use the Docker image from Docker Hub:

docker pull n3d1117/chatgpt-telegram-bot:latest
docker run -it --env-file .env n3d1117/chatgpt-telegram-bot

or using the GitHub Container Registry:

docker pull ghcr.io/n3d1117/chatgpt-telegram-bot:latest
docker run -it --env-file .env ghcr.io/n3d1117/chatgpt-telegram-bot

Docker manual build

docker build -t chatgpt-telegram-bot .
docker run -it --env-file .env chatgpt-telegram-bot

Credits

Disclaimer

This is a personal project and is not affiliated with OpenAI in any way.

License

This project is released under the terms of the GPL 2.0 license. For more information, see the LICENSE file included in the repository.

More Repositories

1

appdb

A fully-featured iOS client for appdb.to written in Swift 5
Swift
245
star
2

cook

macOS command line tool to automate common iOS development tasks
Swift
85
star
3

CrackBot2

A macOS bash script to automate decryption of iOS Apps using a jailbroken iOS device
Shell
34
star
4

ios2m1

macOS command line tool to convert iOS apps into Apple M1 apps
Swift
32
star
5

plex-to-iina

A Safari App Extension for playing Plex content with IINA
Swift
28
star
6

n3d1117.github.io

Cydia repo for my personal iOS tweaks: Runaway, OutOfSight and more
Logos
28
star
7

CrackBot

An old, ugly and deprecated script to download, decrypt and upload .ipa files to appdb. Check out the new one: https://github.com/n3d1117/CrackBot2
Shell
14
star
8

acestream-iina

Play Ace Streams on macOS with IINA
Shell
13
star
9

itms-helper

A Vapor web app to generate and serve custom .plist files for iOS OTA Distribution
Swift
13
star
10

NoAppThinning

Disables App Store app thinning (iOS 11+)
Logos
9
star
11

dl-buddy

A simple download manager for macOS written in Swift
Swift
8
star
12

Grouppy

An iOS patch to make Mach-O binaries use the real application groups entitlements evaluated at runtime.
Shell
5
star
13

LibrarySeatReservation

Web application for the management of seat reservations in the study rooms of the libraries of Florence
Java
4
star
14

ExpandableText

App Store-like SwiftUI expandable text view with "more" button, iOS 13+, fully customizable
Swift
3
star
15

stats-ios

๐Ÿ“Š Personal iOS app to track stuff I've watched/read/listened/played, written in SwiftUI
Swift
2
star
16

semantic-biblio-expansion

Bachelor's thesis in Computer Engineering - Semantic expansion of bibliographic records
JavaScript
1
star
17

autobuyer-splinterlands

(Deprecated) Chrome extension that adds autobuyer function to the CardAuctionz website for the Splinterlands game
JavaScript
1
star
18

maprecipes

A reactive web app for cataloguing and geolocalizing italian recipes
Vue
1
star
19

NERComparison

Comparing the performance of various named entity extractors in Python
TeX
1
star
20

airqino-calibration

Master's thesis in Computer Science & Engineering @ UNIFI
TeX
1
star
21

book-manager

A simple book manager, built using test driven development (TDD) with Java and Maven.
Java
1
star
22

DESDecryption

Parallel Computing - Measure the speedup gained with the parallelization of DES decryption tasks using Cuda (GPU) and OpenMP (CPU)
TeX
1
star
23

AI2018

Artificial Intelligence - Testing decision trees learning accuracy on datasets with missing values
Python
1
star
24

ShapeCreator

Esercizio per esame di Ingegneria del Software - 2018
Java
1
star
25

WristBus

โšœ๏ธ๐Ÿ‡ฎ๐Ÿ‡น Florence's bus timetables directly on your wrist. Written in Swift 4.
Swift
1
star
26

BigramTrigramGenerator

Parallel Computing - Measure the speedup gained when parallelizing n-grams generation using Java Threads and C++ Threads
TeX
1
star
27

TrafficFlowManager

Viewing and managing road traffic flow reconstructions using WMS protocol on a GeoServer instance
PHP
1
star