みなさんこんにちは! 現在、東京大学工学部に在籍している、さとうじょうゆです!
この記事では「MENSA」の募集に、締め切られる前に確実に応募できる方法を誰にでもできるように解説します
※この記事で実際にやってみてわからないことがあればお気軽にお問い合わせください
「MENSA」の入会試験の募集は、”すぐ埋まる”ことで有名です
MENSA応募してみたいんだけどすぐ埋まっちゃうんだよね、、、
「サイトを定期的にチェックし、サイトが更新されていたらDiscordに通知」するDiscord Botを作れば解決!
ということで、今回は「Mensa Notice」と僕が名付けたこのDiscord Botを作っていきます
こんな感じで、サイトが更新された時に通知してくれるbotを今回は作ります!
それでは行ってみよう!
【STEP1】Discordボットを作る準備をしよう
とりあえず、ディスコードのデベロッパーポータルのApplicationのページにいきましょう
まずは、右上の”New Application”ボタンから新しいボットを作ってください
Discordボットのトークンを取得する
左のメニューバーからBotを選択し、そこからDiscordボットのトークンを取得できます!
絶対に、コピーしてメモしておくこと。
ボットのURLを生成する
次に、左のメニューから”OAuth2″を選択し、そのサブメニューから”URL Generator”を選択します
SCOPEの欄から”bot”を選択し、下のBOT PERMISSIONSから必要な機能を選択してください(少なくとも”Send Messages”が必要です)
ボットをサーバーに招待
- この状態で、下に表示されるURLをコピーします
- 新しいタブでそのURLを開きます
- ボットを追加したいサーバーを選択し、Authorizeをクリックします
これでボットがサーバーに入りました!
次に、ボットを入れたいチャネルのIDを取得しよう!
Discordで開発者モードを有効にする
- Discordを開きます
- 左下のユーザー設定(歯車アイコン)をクリックします
- 「App Settings」セクションの「Appearance」を選択します
- スクロールダウンして、「Advanced」セクションまで行きます
- 「Developer Mode」を有効にします(スイッチをオンにします)
チャネルIDを取得する
- 開発者モードを有効にした後、IDを取得したいチャネルに移動します。
- チャネル名の上で右クリックし、「Copy ID」を選択します。
これで準備が整ったよ!
【STEP2】Pythonでコードを書こう
みなさんここにプログラミングのお勉強をしにきたわけではないと思うので、コピペしてもらって大丈夫です!
今回は、簡単なコードの説明だけにしておきます
プログラミングで日常を自動化!
ライブラリのインストール
まずは、discordボットを作成するのに必要なライブラリをインポートします
import discord
import aiohttp
from bs4 import BeautifulSoup
import asyncio
基本設定
自分のDiscordボットのトークンとチャネルIDを入力してください(STEP1で取得してあります!)
Discordボットのトークンの使用量は基本的にタダだから安心してね!
# 監視するウェブサイトのURL
url = "https://mensa.jp/exam/"
# 前回のコンテンツを保存する変数
last_content = ""
# Discordボットのトークン
DISCORD_TOKEN = 'your-discord-token'
# チャネルID
CHANNEL_ID = 1234567890 # 実際のチャネルIDに置き換えてください
# インテントの設定(今回はメッセージの送受信に必要なもののみ)
intents = discord.Intents.default()
intents.messages = True
intents.guilds = True
client = discord.Client(intents=intents)
サイトを定期的にチェックする関数の作成
後に作る、定期的に関数を呼び出す関数を作っておきます
@client.event
async def on_ready():
print(f'Logged in as {client.user.name}')
# Discordクライアントが起動したら、定期的にcheck_websiteを呼び出す
asyncio.create_task(periodic_check_website())
サイトから情報を取得して、サイトが更新されているかを確認する関数です
下の関数では、関東地方の情報に更新があった時に通知するようにコードを書いているよ
async def check_website():
global last_content
async with aiohttp.ClientSession() as session: # aiohttpを使用
async with session.get(url) as response:
text = await response.text()
soup = BeautifulSoup(text, 'html.parser')
# 関東地方のテスト情報を含む要素を取得
current_content_element = soup.find('h3', string='関東地方').find_next_sibling('ul', class_='list')
current_content = current_content_element.get_text(strip=True) if current_content_element else ""
# Discordチャネルに通知
channel = client.get_channel(CHANNEL_ID)
if not channel:
print(f"Failed to retrieve channel for ID {CHANNEL_ID}")
return
# コンテンツに変更があったかチェック
if current_content != last_content:
last_content = current_content
await channel.send(f"ウェブサイトに変更がありました: {url}")
else:
await channel.send("変更なし")
コードをどれくらいの頻度で実行するか定めておきます
この関数が実行されると、定期的に一つ前のサイトをチェックする関数が呼び出されます
async def periodic_check_website():
while True:
await check_website()
await asyncio.sleep(60*60*6) # 6時間ごとに実行
discordボットを起動します
client.run(DISCORD_TOKEN)
ここまでで、コードは完成です!
実際に、実行してみよう
ここまでに書いたコードを全て繋げて、.pyファイルに記述します
それをterminalなどのコマンドプロンプトで実行することで定期的にサイトをチェックして通知してくれるdiscordボットが完成します!
.pyファイルの作り方、コマンドプロンプトの使い方がわからない方は、このブログの右下にあるChatGPTなどで調べてみてね!
実際に使ってみる
左のように、Webサイトに変更があった時にはすぐに通知をしてくれるのでテスト日程が更新されてすぐに気づくことができます!
もう申し込み競争で負けることはない!
東京大学工学部B2。AIに興味があり、AI技術を活かした起業を目指して奮闘中。スマホアプリも作ってたりします。
コメント