LoginSignup
0
0

More than 1 year has passed since last update.

CloudFunctions(python)でDiscordのslashコマンドを実装する

Posted at

↑の記事のpython版です。
@m77so 様の記事がわかりやすいかと思いますので、cloud functionを作るところまではそちらを参考にしてください。

cloud functionを作る

「関数の作成」を選択して、構成は任意で大丈夫です。
今回は例として

  • 環境: 2世代
  • 関数名: test
  • リージョン: us-central1
    にします。また、HTTPSに関しては「未承認の呼び出しを許可」します。

ランタイムはpython3.9で行いました。

import json
import functions_framework
from flask import abort
from flask import jsonify
from nacl.exceptions import BadSignatureError
from nacl.signing import VerifyKey

def validate_request(request):
    verify_key = VerifyKey(bytes.fromhex(public_discord_key))
    signature = request.headers["X-Signature-Ed25519"]
    timestamp = request.headers["X-Signature-Timestamp"]
    body = request.data.decode("utf-8")
    try:
        verify_key.verify(f"{timestamp}{body}".encode(), bytes.fromhex(signature))
    except BadSignatureError:
        return False
    return True

@functions_framework.http
def handle_request(request):
    is_valid = validate_request(request)
    if not is_valid:
        abort(401, "invalid request signature")
    request_type = request.json["type"]
    if request_type == 1:
        return jsonify({"type": 1})
    else:
        message_id = request.json["data"]["id"]
        print(f"message_id: {message_id}")

        return jsonify(
            {
                "type": 4,
                "data": {
                    "tts": False,
                    "content": "You use command!",
                    "embeds": [],
                    "allowed_mentions": {"parse": []},
                },
            }
        )

上記の記事のほぼコピペです。pubsub関連の関数を削除しただけです。

最後に

「CloudFunction Discord Slash Python」みたいに検索したときに日本語の記事が出てこなかったので、メモ書きとして残しておきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0