Telegram bot using EdgeGPT unofficial API
- Access to Bing Chat without leaving your lovely messaging app!
- Change Bing Chat conversation styles
Do you want an original and imaginative response? Or more informative and friendly? Or you just want a concise and straightforward answer?
- Start multiple conversations and switch between them
- Generate Images using Bing (powered by Dall-E)
- Receive voice messages beside text responses if you don't want to read!
Text-to-Speech powered by Edge-TTS
- Send voice messages directly instead of typing!
Automatic-Speech-Recognition powered by AssemblyAI or Whisper (OpenAI)
- Update configuration settings and Bing cookies directly from the bot!
Content:
- python
- git
- ffmpeg (only if you are using whisper)
Commands available to every user are set automatically. However, there are some commands that are hidden:
/unlock <passwd> - Unlock bot functionalities with a password /get <config/cookies> - Retrieve config.json or cookies.json, respectively /update <config/cookies> - Update config.json or cookies.json, respectively /cancel - Cancel current update action
-
Install python dependencies.
$ pip install -r requirements.txt
If you want to contribute, install development dependencies as well.
$ pip install -r dev_requirements.txt
-
Create a self-signed certificate in order to communicate with telegram server using SSL.
$ openssl req -newkey rsa:2048 -sha256 -nodes -keyout config/nginx.key -x509 -days 3650 -out config/nginx.pem
-
Create a directory named
config
to store bot configuration files. Copytemplates/config.json
toconfig
directory. Change values according to your configuration.$ mkdir config $ cp templates/config.json config/config.json
config.json:
-
settings:
-
token - Telegram bot token, obtained from @BotFather.
-
webhook:
true
to run the bot using webhooks.false
to use polling. -
log_level: set level of the logging module.
-
ip: Your server/home IP. Must be accessible from internet.
-
port: Port to receive telegram updates. Allowed ports:
443
,80
,88
and8443
Nginx can be used as a reverse proxy in order to use other ports. Copy
templates/nginx.conf
to config and change values according to your configuration.<docker-host-ip>
is the gateway of the container. Similar to172.17.0.1
<portX>
Can be any port in the user range.
$ cp templates/nginx.conf config/nginx.con $ docker run --rm --name nginx --net host -v ./config/nginx.conf:/etc/nginx/nginx.conf:ro -v ./config/nginx.key:/etc/nginx/nginx.key:ro -v ./config/nginx.pem:/etc/nginx/nginx.pem:ro nginx
-
cert: Path to your server certificate (can be self-signed).
Warning: If you're using a verified certificate, you may receive "certificate verify failed" error. Leave
cert
path empty in your config.json
-
-
apis:
-
chats:
- password: Password to use with /unlock and gain access to the
bot (only required for the first time).
"password": "supersecurepassword123"
- id: List of telegram IDs allowed in the bot, without password. Obtain
if from bots like @getmyid_bot.
"id": [ 123123123, 132322322 ]
- admin: List of telegram IDs allowed retrieve and update configuration files, i.e. config.json, cookies.json.
"admin": [ 123123123 ]
- password: Password to use with /unlock and gain access to the
bot (only required for the first time).
-
-
Run the bot.
$ python src/edge.py
Note: If you run the bot in port 80, it may be needed to run the bot as superuser (sudo)
Build the image and bind config
directory in the container.
$ docker build . -t edgegpt-telegram-bot --rm
$ docker run -d -it --name edgegpt -v ./config:/edgegpt/config edgegpt-telegram-bot
$ docker run -d -it --name edgegpt -v ./config:/edgegpt/config scmanjarrez/edgegpt-telegram-bot
docker-compose.yml file provided.
$ docker compose up -d
Happy to see you willing to make the project better. In order to make a contribution, please respect the following format:
-
Sort imports with
usort
.$ usort format *py
-
Format your code using
black
(line length 79).$ black -l 79 *py
If you are using flake8, add E203 to .flake8 ignore list
[flake8] extend-ignore = E203
$ pre-commit install
$ pre-commit run --all-files
VSCode should have the following settings in settings.json:
{
"python.analysis.fixAll": [],
"python.formatting.blackArgs": [
"-l 79"
],
"python.formatting.provider": "black",
"isort.path": [
"usort format"
],
}
If you use flake8, add:
"python.linting.flake8Args": [ "--ignore=E203", ],
Copyright (c) 2023 scmanjarrez. All rights reserved.
This work is licensed under the terms of the MIT license.
For a copy, see LICENSE.