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起動して動作確認しておわり。