Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

機能要望:Discord新着通知機能 #45

Open
la-png opened this issue May 8, 2024 · 1 comment
Open

機能要望:Discord新着通知機能 #45

la-png opened this issue May 8, 2024 · 1 comment

Comments

@la-png
Copy link

la-png commented May 8, 2024

Xの仕様変更により機能しなくなった新着通知機能の代替として、サイト側から直接Discordに投稿する機能が欲しいです。

具体的な手順
・Discordの送信先チャンネルの設定画面を開き、(PC版なら)"連携サービス/ウェブフック/新しいウェブフック"に進む。
・発言に使用したい名前とアイコンを設定し、"ウェブフックURLをコピー"を選択。
・"https://discord.com/api/webhooks/<数字>/<英数字>"形式のURLが得られるので、非公開な場所に保存。これが流出すると該当チャンネルに無制限に連投などされ、送信者を特定できない。
・上記URLにapplication/json形式で下記をPOSTする機能を、記事生成時に呼び出す。
{ "content": "<記事URL>" }
・望むのであれば記事更新時にも同様の処理をする。URLの前後にテキストを追加しても良い。"\n"で改行を入れても良い。

@la-png
Copy link
Author

la-png commented May 9, 2024

最初の説明に漏れがありました。
・urllibデフォルトUAだと拒否られるので、Pythonでやる場合は気をつけてください。
・ボタンを添付する場合、Botで作成したURLでないと拒否られます。人間が作ったものは無効。

Discordサバの方でボタン付けたら良いんじゃない?という話になり、そこの説明までテキストでやることに限界を感じたため、サンプルコードを添付します。

import json
from urllib.request import Request, urlopen


webhook_url = 'https://discord.com/api/webhooks/xxxxx'

data = {
	"content": "これは送信テストです\nhttps://healthy-person-emulator.org/archives/26852",
	"components": [
		{
			"type": 1,
			"components": [
				{
					"type": 2,
					"style": 5,
					"label": "𝕏",
					"url": "https://twitter.com/intent/post?url=https%3A%2F%2Fhealthy-person-emulator.org%2Farchives%2F26852&text=%E8%A8%80%E8%91%89%E3%81%AF%E4%BA%BA%E6%A0%BC%E4%BF%AE%E6%AD%A3%E3%83%91%E3%83%83%E3%83%81%E3%81%A7%E3%81%82%E3%82%8B+%E5%81%A5%E5%B8%B8%E8%80%85%E3%82%A8%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF%E4%BA%8B%E4%BE%8B%E9%9B%86+&via=helthypersonemu"
				},  # 以下同様に、横に5つまでコピペで増やせる
				{
					"type": 2,
					"style": 5,
					"label": "misskey",
					"url": "https://misskeyshare.link/share.html?text=%E8%A8%80%E8%91%89%E3%81%AF%E4%BA%BA%E6%A0%BC%E4%BF%AE%E6%AD%A3%E3%83%91%E3%83%83%E3%83%81%E3%81%A7%E3%81%82%E3%82%8B+%E5%81%A5%E5%B8%B8%E8%80%85%E3%82%A8%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF%E4%BA%8B%E4%BE%8B%E9%9B%86+&url=https://healthy-person-emulator.org/archives/26852",
                    "emoji": {
                        "id": "1238053804503597066",
                        "name": "",
                        "animated": False
                    }  # サバ絵文字の追加も可能 Unicode絵文字だったら "name": "😀"だけの形式
                }
			]
		},
		{  # こうすると縦に5つまで増やせる
			"type": 1,
			"components": [
				{
					"type": 2,
					"style": 5,
					"label": "row2",
					"url": "https://google.com"
				}
			]
		}
	]
}

def post_discord(webhook_url, data):
    headers = {
        "Content-Type": "application/json",
        "User-Agent": "_Python-urllib/3.12",
    }

    request = Request(
        webhook_url,
        data=json.dumps(data).encode(),
        headers=headers,
    )

    with urlopen(request) as response:
        response_body = response.read().decode("utf-8")
        print(response_body)

if __name__ == "__main__":
    post_discord(webhook_url, data)

@sora32127 sora32127 reopened this May 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants