Open la-png opened 6 months ago
最初の説明に漏れがありました。 ・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)
Xの仕様変更により機能しなくなった新着通知機能の代替として、サイト側から直接Discordに投稿する機能が欲しいです。
具体的な手順 ・Discordの送信先チャンネルの設定画面を開き、(PC版なら)"連携サービス/ウェブフック/新しいウェブフック"に進む。 ・発言に使用したい名前とアイコンを設定し、"ウェブフックURLをコピー"を選択。 ・"https://discord.com/api/webhooks/<数字>/<英数字>"形式のURLが得られるので、非公開な場所に保存。これが流出すると該当チャンネルに無制限に連投などされ、送信者を特定できない。 ・上記URLにapplication/json形式で下記をPOSTする機能を、記事生成時に呼び出す。 { "content": "<記事URL>" } ・望むのであれば記事更新時にも同様の処理をする。URLの前後にテキストを追加しても良い。"\n"で改行を入れても良い。