Как изменить канал Discho webhook с Python - PullRequest
0 голосов
/ 13 марта 2020

У меня есть сценарий Python, который отправляет сообщения, используя webhook, назначенный моему серверу Discord. Я хотел бы, чтобы моя программа могла иногда изменять канал webhook.

Вкл. Discord Developer Portal Я читал, что есть два способа изменения webhooks с помощью запросов (1. Modify webhook , 2. Изменить webhook с токеном ).

Я протестировал более простой второй, но он позволяет только изменять аватары и имена пользователей:

 r = requests.patch("https://discordapp.com/api/webhooks/.../...", json={ "name":"New Name" })
 # status code 200

Изменение Каналы webhook предлагаются первым, но для этого требуется разрешение MANAGE_WEBHOOKS, поэтому приведенный ниже метод, конечно, не работает:

 r = requests.patch("https://discordapp.com/api/webhooks/...", json={ "channel_id":12345 })
 # status code 401 (unauthorized)

Я создал приложение Discord и начал читать о работе с авторизацией для webhooks здесь но я застрял и не понимаю, как на самом деле заставить его работать.

1 Ответ

0 голосов
/ 14 марта 2020

После fre sh просмотра документации Discord я наконец решил свою проблему. Ниже я пишу, как добиться такого результата простым Python скриптом:

  1. Откройте портал Discord Developer, создайте новое приложение, добавьте бота и URI для перенаправления в разделе OAuth2.
  2. Создайте URL авторизации с помощью генератора в разделе OAuth2. Для Области применения выберите bot и discord.incoming. Для Разрешения бота выберите Manage Webhooks. Вы получите что-то вроде этого:

    https://discordapp.com/api/oauth2/authorize?client_id=<MY_CLIENT_ID>&permissions=536870912&redirect_uri=<MY_URI>&response_type=code&scope=bot%20webhook.incoming
    
  3. Откройте эту ссылку в браузере, чтобы подключить бота и веб-крючок к вашему серверу. При принятии вы будете перенаправлены на ваш URI-адрес.

  4. Адрес будет содержать параметр строки запроса code. Я просто скопировал code вручную и вставил его в скрипт на следующем шаге (обратите внимание, что code действует в течение короткого времени, поэтому, если вы делаете все слишком медленно, аутентификация может не пройти).
  5. Вот код, который делает необходимую аутентификацию:

    import requests
    
    CLIENT_ID = # Your client id 
    CLIENT_SECRET = # Your client secret
    REDIRECT_URI = # Your redirect URI
    CODE = # Your code from step 4.
    
    data = {
        'client_id': CLIENT_ID,
        'client_secret': CLIENT_SECRET,
        'grant_type': 'authorization_code',
        'code': CODE,
        'redirect_uri': REDIRECT_URI,
        'scope': 'bot webhook.incoming',
        'permissions': "536870912",
    }
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    r = requests.post('https://discordapp.com/api/oauth2/token', data=data, headers=headers)
    r.raise_for_status()
    

    Аутентификация успешна, если не выдается никаких исключений.

  6. Если все работает хорошо, запустите этот код, чтобы изменить текущий канал webhook:

    ...
    
    BOT_TOKEN = # Your bot's token
    WEBHOOK_ID = # Your webhook's id
    
    json = { "channel_id": 12345 } # Replace with new webhook's channel id
    headers = { "Authorization": "Bot " + BOT_TOKEN }
    
    r = requests.patch('https://discordapp.com/api/webhooks/' + WEBHOOK_ID, json=json, headers=headers)
    
...