【スクレイピング】Discordの解析を基礎から学ぼう! – 1

未分類

お久しぶりです、Yukiです!

この「Discordの解析を基礎から学ぼう!」のシリーズ(?)は、基礎やちょっとだけ高度な事、注意すべきこと等を-1くらいから親切に教えるものです。

とはいえ、私自身正しい知識が無かったり、10まで完全に知っているわけではないので…ほんの少し参考になりそうな記事、を目指します。
基本的にはご自身でいろいろ試行錯誤してもらう形です。

前提

前提として、今回のスクレイピング(?)はRaid等のような、いわゆるselfbotを前提として進めていきますので、通常のBot等については全く取り扱いません…

また、pythonについてや、用語については最低限知っているものとしますので、あまりにも知識不足な場合はもしかしたら先に勉強をした方が良い可能性もあります。

-1から

まずは説明からしていきましょう。

エンドポイントの種類

まずDiscordには親切にもRestAPI(便利なAPI)が用意されています。
形式はjsonでpostして、jsonで返ってきます。

少しrequest系を触っている人なら、ここまでは理解できるかと思います。

そしてdiscordにはここから、スクレイピング対策(selfbot対策)があるのですが、エンドポイントによってその強さが異なったりします。
その強さは大きく3つにわけることが出来ます。

  • 弱い: 適当にリクエストを送っても通るような簡単なapi
  • 普通: 適当にリクエストを送るとcaptchaやアカウント凍結のリスクがあるapi
  • 強い: ある程度工夫しないと簡単にアカウント凍結のリスクがあるapi

この3つに分けられます。
それぞれのエンドポイントの例でいえば

  • 弱い: メッセージ送信
  • 普通: サーバー参加
  • 強い: アカウント生成

となります。
このシリーズでは「弱い」と「普通」の対策の強さのエンドポイントに触れます。
「強い」についてはほとんど触れませんが、ちょっとした情報くらいは話します。

レートリミットの違い

また、レートリミットの違いについても、少し違いがあります。
いくつかの種類がありますのでこれも紹介していきます。

  • レートリミット: 普通のレートリミットで、それぞれのエンドポイントの60秒当たりのリクエスト数の上限を超えた場合にかかる。
  • グローバルリミット: どのエンドポイントにも当てはまるレートリミットで、1秒に50リクエストの上限を超えた場合にかかる。
  • CFレートリミット: 基準は不明ですが、過度に失敗したリクエストを大量に送ると、IPアドレス自体が長期間ブロックされる。

簡単に3つのリミットがあります。
スクレイピングにおいて最も注意するべきはレートリミットです。

このレートリミットをしっかり把握して、ある程度のハンドリングをしておかなければ、あまり良い方法や良いプログラム、質の良いselfbotとは言えないでしょう。

逆に最も考慮する必要のないレートリミットは、CFレートリミットです。
NukeBotを作成する場合、これは最も考慮するべきですが、今回の場合selfbotですので、例外です。

プロキシは基本

スクレイピングをするにあたって、プロキシは基本中の基本です。
そうでなければ大量のレートリミットや、アカウント凍結が待っています。

どれだけ対策が緩いエンドポイントであろうと、大量のリクエストを同じIPアドレスからしてしまえば、あまりよろしくない結果が待っているでしょう。

そのため基本的には有料である程度品質が担保されているプロキシをお勧めします。

メッセージを送ってみる

まずは最初という事で、メッセージを送ってみましょう。
メッセージ送信のapiのエンドポイントは

/api/v10/channels/:channel/messages

となります。
「:channel」にはチャンネルIDが入ります。

Content-Typeはapplication/jsonであり、request-bodyに内容を入れていきます。
また、ヘッダーの「Authorization」にそのままユーザーTOKENを入れます。

実際にpythonの例文を書いてみます。

import requests

requests.post(
    "https://discord.com/api/v10/channels/0/messages",
    headers={
        "Content-Type": "application/json",
        "Authorization": "TOKEN"
    },
    json={"content": "!work"}
)

例えばこれは、チャンネルID「0」に「!work」と送信するコードです。

これはBotと同じエンドポイントであり、さらに対策も緩いため、初心者でも非常に理解しやすいかと思いますので、試してみてください。

最後に

正直内容が薄い…
次回からは対策が「普通」に分類されるエンドポイントについて紹介していきます。

もし少しでも参考になったという方は、なんかー…シェアでもしてください()

では!

コメント

  1. NUI より:

    やりますねぇ

タイトルとURLをコピーしました