파이썬으로 일방적으로 통지하는 discot bot 만들기 (requests, json 만 사용)

12376 단어 파이썬디스코드

내용



파이썬을 사용한 discord bot를 만들면 크게 나누어 두 가지 유형이있는 것 같습니다.
  • 대화식으로 동작하는 타입
  • discord.py라는 라이브러리가 편리하다. 이 기사에서는 다루지 않습니다.

  • 일방적으로 통지하는 타입
  • 정기적으로 통지하려면 이쪽. 아래에서 설명합니다.


  • webhook URL 획득



    채널마다 취득이 필요합니다.
    이 페이지의 「Webhook URL을 취득」이 참고가 됩니다.
    옵션 설정은 코드로 할 수 있으므로 패스해도 좋다.
  • [루비]디스코드에 웹훅에 메시지 올리기

  • 간단한 버전



    가장 심플한 구성은 이하.
    import requests, json
    
    
    webhook_url  = 'さっき取得したWebhook URL'
    main_content = {'content': '送るテキスト'}
    headers      = {'Content-Type': 'application/json'}
    
    response     = requests.post(webhook_url, json.dumps(main_content), headers=headers)
    

    전송 성공!


    bot의 외형



    bot의 외형은 코드내에서 다음과 같이 정의할 수 있습니다.
    아이콘을 설정하려면 이미지 URL이 필요합니다. 아래에서는 트위터 계정 아이콘의 URL을 제공합니다.
    로컬의 이미지 파일의 경우는, Webhook URL 취득시에 설정하는 것 외 없음?
    import requests, json
    
    
    webhook_url  = 'さっき取得したWebhook URL'
    main_content = {
                       'username': 'お名前',
                       'avatar_url': '画像のURL',
                       'content': 'テキスト'
                   }
    headers      = {'Content-Type': 'application/json'}
    
    response     = requests.post(webhook_url, json.dumps(main_content), headers=headers)
    

    전송 성공!


    메시지의 모습을 보고 싶다



      임베디드(embeds)를 사용합니다. 자세한 내용은 여기 .
    예를 이하에 줍니다.
    import requests, json
    
    
    webhook_url  = 'さっき取得したWebhook URL'
    embeds       = [
                       {
                           'description': 'googleのページ',
                           'color': 15146762,
                           'image': {
                               'url': '画像のURL'
                           }
                        }
                   ]
    main_content = {
                       'username': 'お名前',
                       'avatar_url': '画像のURL',
                       'content': 'テキスト',
                       'embeds': embeds
                   }
    headers      = {'Content-Type': 'application/json'}
    
    response     = requests.post(webhook_url, json.dumps(main_content), headers=headers)
    

    이런 외형이 됩니다.

    왼쪽 세로 막대의 색은 embedscolor 로 설정합니다.
     숫자와 색의 대응은 여기 "Color Mixer"의 막대를 움직여 표시하고 싶은 색을 찾아, "Decimal:"의 오른쪽의 숫자를 주어 주세요.


    함수로 사용



    예를 들면 이런 느낌입니다.
    텍스트만 보낼 때는 channel , content 만 인수를 줍니다.
    포함을 사용하고 싶을 때는, 필요한 정보를 emb 로 줍니다.
    emb = {
              'description': '埋め込み内テキスト',
              'color': '色',
              'img_url': '画像URL',
              'content': '本文'
          }
    
    def send_discord_msg(channel, content, emb=0):
        webhook_dic     = {'channel 1': 'channel 1のWebhook URL', 
                           'channel 2': 'channel 2のWebhook URL'}
        webhook_url     = webhook_dic[channel]
    
        main_content    = {
            'username': 'botの名前',
            'avatar_url': 'アイコンURL',
            'content': content
        }
    
        if emb != 0:
            color_dic = {
                '色1': 15146762,
                '色2': 49356,
            }
            embeds = [
                {
                    'description': emb['description'],
                    "color": color_dic[emb['color']],
                    "image": {
                        "url": emb['img_url']
                    },
                }
            ]
            main_content.update({'embeds': embeds})
            main_content['content'] = emb['content']
    
        headers = {'Content-Type': 'application/json'}
        try:
            res = requests.post(webhook_url, json.dumps(main_content), headers=headers)
        except Exception as e:
            print(e)
    

    좋은 웹페이지 즐겨찾기