Для получения ID сервера (гильдии), на который был добавлен ваш бот, и реализации редиректа с использованием Flask, вам потребуется следующее:
1. **Настроить OAuth2**: При добавлении бота на сервер пользователи должны предоставить необходимые разрешения. Ваша ссылка для авторизации должна включать необходимый идентификатор клиента (client_id), а также настроить redirect_uri, чтобы получить код авторизации.
2. **Получение токена доступа**: После того как пользователь авторизует бота и будет перенаправлен на ваш `redirect_uri`, вы получите код в параметре запроса. С этим кодом вам нужно будет получить токен доступа, который затем можно использовать для взаимодействия с Discord API.
3. **Получение информации о сервере**: С помощью полученного токена доступа вы сможете отправить запрос к Discord API, чтобы получить информацию о сервере, куда был добавлен бот, включая его ID.
Вот примерный код, который иллюстрирует этот процесс:
```python
from flask import Flask, request, redirect
import requests
app = Flask(__name__)
CLIENT_ID = 'your_client_id'
CLIENT_SECRET = 'your_client_secret'
REDIRECT_URI = 'your_redirect_uri'
SCOPE = 'bot'
PERMISSIONS = '8' # Пример: Администраторские права
@app.route('/')
def home():
return 'Hello! Click here to add the bot: <a href="https://discord.com/oauth2/authorize?client_id={}&redirect_uri={}&response_type=code&permissions={}&scope={}>Add Bot</a>'.format(CLIENT_ID, REDIRECT_URI, PERMISSIONS, SCOPE)
@app.route('/oauth/callback')
def oauth_callback():
code = request.args.get('code')
if not code:
return 'Authorization failed!', 400
# Обмен кода на токен доступа
token_response = requests.post('https://discord.com/api/oauth2/token', data={
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': REDIRECT_URI,
'scope': SCOPE
})
token_json = token_response.json()
access_token = token_json.get('access_token')
if access_token:
# Получаем информацию о пользователе
user_response = requests.get('https://discord.com/api/users/@me', headers={
'Authorization': f'Bearer {access_token}'
})
user_info = user_response.json()
# Здесь можно сохранить ID сервера (guild_id) в базу данных
# Если вы добавите логику для распознавания ID сервера, это можно сделать через webhook или события Discord
return f'Bot added to the server. User ID: {user_info["id"]}'
else:
return 'Failed to fetch access token', 400
if __name__ == '__main__':
app.run(port=5000)
```
### Важные моменты:
- **Убедитесь, что ваша redirect_uri зарегистрирована в настройках вашего приложения на [Discord Developer Portal](https://discord.com/developers/applications)**.
- **Для получения информации о гильдии**: вы можете использовать различные события или вебхуки для получения информации о серверах (гильдиях), где бот был добавлен. Discord API предоставляет событийный механизм, который поможет вам в этом.
- **Безопасность**: Следует позаботиться о безопасности и хранении ваших токенов (не оставляйте их в коде и используйте переменные окружения).