Web、サーバ、ソフトウェア、バグ・脆弱性 などの情報を何人かで集まって書いていく IT/Web情報系ブログ

OverwatchとかApex LegendsとかValorantでキャラ選ぶのがめんどい人がBOT@Discordに選ばせようとしたやつ

投稿日:   投稿者:nk.

Valorantが正式リリースされたわけですが、最初はどのキャラ使っていいかわからんと思うのでそういうときにてけとーに選んでくれるBOTをdiscordにぶちこんだ男の物語。ついでにOverwatchとApex Legendsにも対応してます。自分がやってるのOWだけやが。

コード

pythonは勘でいじってるからよくわからん。

import discord
import random
import copy

# アクセストークン
token  = 'TOKEN'

# 筋肉ID (クライアントID)
muscleID = 'CID'

# キャラ一覧
CHARAS = {"V":["JETT", "PHOENIX", "RAZE", "SOVA", "BREACH", "BRIMSTONE", "OMEN", "VIPER", "SAGE", "CYPHER", "REYNA"],
    "OWT":["DVA", "ウィンストン", "オリーサ", "ザリア", "シグマ", "ラインハルト", "レッキングボール", "ロードホッグ"],
    "OWD":["エコー", "ゲンジ", "マクリー", "ファラ", "リーパー", "ソルジャー", "ソンブラ",
        "トレーサー", "ドゥームフィスト", "バスティオン", "ハンゾー", "ジャンクラット",
        "メイ", "トールビョーン", "ウィドウメイカー", "シンメトラ", "アッシュ"],
    "OWS":["アナ", "ルシオ", "マーシー", "ゼニヤッタ", "モイラ", "ブリギッテ", "バティスト"],
    "OW":[],
    "A":["ブラッドハウンド", "ジブラルタル", "ライフライン", "パスファインダー", "レイス", "バンガロール",
        "コースティック", "ミラージュ", "オクタン", "ワットソン", "クリプト", "レヴナント", "ローバ"]}

OW_ALL = copy.deepcopy(CHARAS["OWT"])
OW_ALL.extend(copy.deepcopy(CHARAS["OWD"]))
OW_ALL.extend(copy.deepcopy(CHARAS["OWS"]))
CHARAS["OW"] = OW_ALL

help_msg = '''キャラをランダムで選んでくれるBOTです。
使えるゲームはいまのところV(valorant)、A(apex)、OW(おばお全キャラ)、OWT(おばおタンク)、OWD(おばおダメージ)、OWS(おばおサポ)。
使用例は
@ゲームキャラランダムピックくん V ktm@s nk.
LISTで全キャラ出力します。キャラ足りなかったら管理者までお知らせを。
'''


muscleID += '>'

print("RANDOM PICK")

# クライアント生成
client = discord.Client()


# メッセージ受信時
@client.event
async def on_message(message):

    # メッセージ送信者がBotだった場合は無視する
    if message.author.bot:
        return

    # メンションかどうか
    if client.user in message.mentions:

        # for debug
        # print(message.content)

        # スペース区切りで配列に代入
        text = message.content.split()

        # text[0]が当該BOTじゃないなら終わり
        if not muscleID in text[0] or text[0].find('<@') == -1: # <@始まりでマッスルID終わりでなければ
            return

        if len(text) == 2 and text[1] == "LIST":
            msg = ""
            for L in CHARAS:
                msg += L+": "+ ", ".join(CHARAS[L]) + "\n"
            await message.channel.send(msg)
            return

        if len(text) < 3:
            await message.channel.send(help_msg)
            return

        # 最初のメンション部分が不要なので[0]をカットして入れなおす
        text = text[1:]

        # ゲーム指定
        game = text[0]

        if not game in CHARAS:
            await message.channel.send(game+"は不明なゲームでやんす")
            return

        CHARA_LIST = copy.deepcopy(CHARAS[game])

        text = text[1:]

        # 重複削除
        text = sorted(list(set(text)),key=text.index)

        if len(text) > len(CHARA_LIST):
            await message.channel.send("キャラより人数多すぎ")
            return

        msg = ""

        for UNAME in text:
            GETCHARA = random.choice(CHARA_LIST)
            CHARA_LIST.remove(GETCHARA)
            msg += UNAME+"は"+GETCHARA+"を、"

        msg += "使うのです"

        # メッセージ送信
        await message.channel.send(msg)

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

導入方法

pythonインスコ

debianにpython3入れようとしたら一生エラー出て久々にキレたのでWindowsにpython入れた。
とりあえずPython 3.8.3のページ下部にあるインストーラーを使って適当にインストール。いまの時代、ActivePythonじゃなくて公式がインストーラー出してるんすごい時代やね。

discord.py入れる

discordのBOT用のライブラリであるdiscord.pyを導入する。
DiscordでBOTを機能させるまでの手順を参考に、コマンドプロンプト使って

python -m pip install -U discord.py

で行けた。

BOT登録

DiscordでBOTを機能させるまでの手順見て。
TOKENとクライアントIDをメモっておく。

BOTへんしゅー

上記コード6行目と9行目のTOKENとCIDを書き換える。あとはBOT起動して動作確認しておわり。

- Python , , , ,

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

関連記事はありませんでした