1_of9OCSRWoAoS3_lNVKqM2g













非固定IPのご家庭でマイクラ鯖などを運用している場合。
DDNSサービスなどを使って日々変動するIPを
指定のドメインに紐付ける、というのが一般的だと思います。
が、URLをずっと晒しているというのは
家庭のグローバルIPがいつでも割れることにもなります。

これはセキュリティにやや難あり。

しかし。
いちいちIPが変わるたびにユーザーさんに
個別にURLをお知らせしていては面倒。

なので、マイクラ鯖のDiscordでURLを問い合わせると、
その時点でのサーバー機のIPを返す、みたいな機能を実装したい。

ユーザーに一手間かけるけど、クローズドなDiscordでしかIPが割れないので
不正アクセス的なリスクはちょっと少なくなる、かも。

実装としては、
サーバーを実行しているマシンでDiscordのBOTをPythonで走らせます。
コードは以下の通り。


# インストールした discord.py を読み込む
import discord

# グローバルIP取得処理
import urllib.request
ip = urllib.request.urlopen('http://inet-ip.info/ip').read().decode('utf-8')
ipp = '現在のURLは【' + ip + '】です。'

# 自分のBotのアクセストークンに置き換えてください
TOKEN = 'ACCESSTOKEN'

# 接続に必要なオブジェクトを生成
client = discord.Client()

# 起動時に動作する処理
@client.event
async def on_ready():
    # 起動したらターミナルにログイン通知が表示される
    print('ログインしました')

# メッセージ受信時に動作する処理
@client.event
async def on_message(message):
    # メッセージ送信者がBotだった場合は無視する
    if message.author.bot:
        return

    # 「/URL」コマンドを受け取るとIPが返る処理
    if message.content == '/URL':
        await message.channel.send(ipp)

# Botの起動とDiscordサーバーへの接続
client.run(TOKEN) 

以下、よろしく。