diff --git a/.env.example b/.env.example index d3d368d0..5038b036 100644 --- a/.env.example +++ b/.env.example @@ -54,4 +54,16 @@ ALLOWED_TELEGRAM_USER_IDS=USER_ID_1,USER_ID_2 # TTS_PRICES=0.015,0.030 # BOT_LANGUAGE=en # ENABLE_VISION_FOLLOW_UP_QUESTIONS="true" -# VISION_MODEL="gpt-4-vision-preview" \ No newline at end of file +# VISION_MODEL="gpt-4-vision-preview" + +# Local Telegram bot API mode (enables >20MB file uploads to the bot) +# Note: Before switching to local mode you must first logout the bot from the cloud API: +# https://api.telegram.org/bot/logOut +# +# you must also setup your own the API and file server. For addtl details check: +# https://github.com/python-telegram-bot/python-telegram-bot/wiki/Local-Bot-API-Server +# https://github.com/tdlib/telegram-bot-api +# https://github.com/tdlib/telegram-bot-api/issues/381 +#TELEGRAM_BOT_API_URL=http://telegram-bot-api.lan:8081/bot +#TELEGRAM_BOT_API_BASE_FILE_URL=http://telegram-bot-api.lan:8080/ +#TELEGRAM_BOT_API_LOCAL_MODE=true diff --git a/README.md b/README.md index 2e9230d1..e438aa37 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,9 @@ Check out the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/di | `WHISPER_PROMPT` | To improve the accuracy of Whisper's transcription service, especially for specific names or terms, you can set up a custom message. [Speech to text - Prompting](https://platform.openai.com/docs/guides/speech-to-text/prompting) | `-` | | `TTS_VOICE` | The Text to Speech voice to use. Allowed values: `alloy`, `echo`, `fable`, `onyx`, `nova`, or `shimmer` | `alloy` | | `TTS_MODEL` | The Text to Speech model to use. Allowed values: `tts-1` or `tts-1-hd` | `tts-1` | - +| `TELEGRAM_BOT_API_URL` | [Telegram Bot API](https://github.com/tdlib/telegram-bot-api) URL. Before switching to self hosted API you must first logout the bot from the cloud API: `https://api.telegram.org/bot/logOut` |`https://api.telegram.org/bot`| +| `TELEGRAM_BOT_API_BASE_FILE_URL` | Bot API file retrival URL. Set this parameter when using `TELEGRAM_BOT_API_URL`. Refer to `.env.example` and [Local Bot API](https://github.com/python-telegram-bot/python-telegram-bot/wiki/Local-Bot-API-Server) |`https://api.telegram.org/file/bot`| +| `TELEGRAM_BOT_API_LOCAL_MODE` | Local BOT API mode. Set to `true` when running self hosted api with the `--local` flag. Enables large file upload to the bot. |`False`| Check out the [official API reference](https://platform.openai.com/docs/api-reference/chat) for more details. #### Functions diff --git a/bot/main.py b/bot/main.py index 41604c84..69da67b0 100644 --- a/bot/main.py +++ b/bot/main.py @@ -100,6 +100,9 @@ def main(): 'tts_prices': [float(i) for i in os.environ.get('TTS_PRICES', "0.015,0.030").split(",")], 'transcription_price': float(os.environ.get('TRANSCRIPTION_PRICE', 0.006)), 'bot_language': os.environ.get('BOT_LANGUAGE', 'en'), + 'telegram_bot_api_url': os.environ.get('TELEGRAM_BOT_API_URL', 'https://api.telegram.org/bot'), + 'telegram_bot_api_base_file_url': os.environ.get('TELEGRAM_BOT_API_BASE_FILE_URL', 'https://api.telegram.org/file/bot'), + 'telegram_bot_api_local_mode': os.environ.get('TELEGRAM_BOT_API_LOCAL_MODE', 'false').lower() == 'true', } plugin_config = { diff --git a/bot/telegram_bot.py b/bot/telegram_bot.py index 7a536b1f..71e6d496 100644 --- a/bot/telegram_bot.py +++ b/bot/telegram_bot.py @@ -1054,6 +1054,9 @@ def run(self): .get_updates_proxy_url(self.config['proxy']) \ .post_init(self.post_init) \ .concurrent_updates(True) \ + .base_url(self.config['telegram_bot_api_url']) \ + .base_file_url(self.config['telegram_bot_api_base_file_url']) \ + .local_mode(self.config['telegram_bot_api_local_mode']) \ .build() application.add_handler(CommandHandler('reset', self.reset)) diff --git a/translations.json b/translations.json index 8655db07..904387b3 100644 --- a/translations.json +++ b/translations.json @@ -31,7 +31,7 @@ "vision_fail":"Failed to interpret image", "tts_no_prompt":"Please provide text! (e.g. /tts my house)", "tts_fail":"Failed to generate speech", - "media_download_fail":["Failed to download audio file", "Make sure the file is not too large. (max 20MB)"], + "media_download_fail":["Failed to download file", "Make sure the file is not too large. (max 20MB or 2000MB in Bot API local mode)"], "media_type_fail":"Unsupported file type", "transcript":"Transcript", "answer":"Answer", @@ -266,7 +266,7 @@ "image_fail":"Не удалось создать изображение", "tts_no_prompt":"Пожалуйста, подайте текст! (например, /tts мой дом)", "tts_fail":"Не удалось создать речь", - "media_download_fail":["Не удалось загрузить аудиофайл", "Проверьте, чтобы файл не был слишком большим. (не более 20 МБ)"], + "media_download_fail":["Не удалось загрузить аудиофайл", "Проверьте, чтобы файл не был слишком большим. (не более 20 МБ, или 2000 МБ в локальном режиме Bot API)"], "media_type_fail":"Неподдержанный тип файла", "transcript":"Расшифровка", "answer":"Ответ", @@ -689,7 +689,7 @@ "image_fail":"Не вдалося створити зображення", "tts_no_prompt":"Будь ласка, надайте текст! (наприклад, /tts мій будинок)", "tts_fail":"Не вдалося створити голос", - "media_download_fail":["Не вдалося завантажити аудіофайл", "Переконайтеся, що файл не занадто великий. (максимум 20 МБ)"], + "media_download_fail":["Не вдалося завантажити аудіофайл", "Переконайтеся, що файл не занадто великий. (максимум 20 МБ, або 2000 МБ з локальним Bot API)"], "media_type_fail":"Непідтримуваний тип файлу", "transcript":"Транскрипт", "answer":"Відповідь",