2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Discordで使えるValorant用Botを作成してみた

Posted at

作成の経緯

友達とValorantで遊んでいるときに、ランダムでエージェントを選ぶことが出来る機能があればもっと楽しくなると思い、だったら作っちゃえばよくね?ってなったからです。

どんなことができるの?

このDiscordボットは、ボイスチャンネルに入っているユーザーに対して、Valorantのエージェントと武器をランダムに選択することができます。

使用ツール

Replitを今回は使用して、作成していこうと思います。
諸々の使い方などは使っていくうちに覚えていくと思うので、今回はスルーで。

Rplitの詳細はこちらから

Replitとは?50以上のプログラミングが利用できるブラウザ型IDE

必要なライブラリのインポート

main.py

import discord
import rando
import os
from discord.ext import commands
from keep_alive import keep_alive

インテントの生成

intents = discord.Intents.default()
intents.message_content = True

ボットの作成

bot = commands.Bot(command_prefix='/', intents=intents)

Valorantエージェントと武器のリスト

valorant_agents = [
    "ジェット", "レイズ", "フェニックス", "レイナ", "ヨル", "ネオン", "セージ", "サイファー", "キルジョイ",
    "チェンバー", "デッドロック", "ブリーチ", "ソーヴァ", "スカイ", "KAY/O", "フェイド", "ゲッコー", "オーメン",
    "ブリムストーン", "ヴァイパー", "アストラ", "ハーバー"
]

valorant_handgun = ["クラシック", "ショーティ", "フレンジー", "ゴースト", "シェリフ"]

valorant_eco = [
    "クラシック", "ショーティ", "フレンジー", "ゴースト", "シェリフ", "スティンガー", "バッキー", "アレス",
    "マーシャル", "ジャッジ"
]

valorant_buy = [
    "スペクター", "ブルドッグ", "ガーディアン", "ヴァンダル", "ファントム", "オーディン", "オペレーター"
]

Discordコマンド

ランダムエージェントを選択するコマンド

@bot.command(name='random_agent')
async def random_agent(ctx):
    # ランダムにValorantエージェントを選択
    random_agent = random.choice(valorant_agents)

    # コマンドを打ったチャンネルに結果を送信
    await ctx.send(f'{ctx.author.display_name} さんのランダムエージェントは {random_agent} です!')

ボイスチャンネルのユーザーにランダムエージェントを割り当てるコマンド

@bot.command(name='random_agents')
async def random_agents(ctx):
    # ボイスチャンネルに参加しているユーザーを取得
    if ctx.author.voice and ctx.author.voice.channel:
        voice_channel = ctx.author.voice.channel
        members = voice_channel.members

        # ボイスチャンネルのユーザー数に合わせてランダムエージェントを選択
        if members:
            random_agent_list = random.sample(valorant_agents, len(members))
            response = "ランダムエージェント\n"

            # メンバーごとに名前とランダムエージェントを組み合わせて表示
            for member, agent in zip(members, random_agent_list):
                response += f"{member.display_name}: {agent}\n"

            # 1つのメッセージにまとめて送信
            await ctx.send(response)
        else:
            await ctx.send('ボイスチャンネルに誰もいません。')
    else:
        await ctx.send('ボイスチャンネルに接続していません。')

ボイスチャンネルのユーザーにランダムな武器を割り当てるコマンド

@bot.command(name='random_weapons')
async def random_weapons(ctx):
    # ボイスチャンネルに参加しているユーザーを取得
    if ctx.author.voice and ctx.author.voice.channel:
        voice_channel = ctx.author.voice.channel
        members = voice_channel.members

        # ボイスチャンネルのユーザー数に合わせて武器結果を作成
        if members:
            response = f'ランダム武器:\n'

            for member in members:
                handgun = random.choice(valorant_handgun)
                eco = random.choice(valorant_eco)
                buy = random.choice(valorant_buy)

                response += f'{member.display_name} さん\n'
                response += f'ハンドガンラウンド: {handgun}\n'
                response += f'エコラウンド: {eco}\n'
                response += f'バイラウンド: {buy}\n\n'

            await ctx.send(response)
        else:
            await ctx.send('ボイスチャンネルに誰もいません。')
    else:
        await ctx.send('ボイスチャンネルに接続していません。')

ボットを実行

# ボットをオンラインに保つためのWebサーバーを起動
keep_alive()

# ご利用の Discord ボットトークンを指定してクライアントを実行
my_secret = os.environ['KEY']
bot.run(my_secret)

ボットをオンラインに保つための設定を行う

keep_alive.py

from flask import Flask
from threading import Thread

# Flaskアプリケーションの作成
app = Flask('')

# ルートパスへのGETリクエストに対するルートハンドラーを定義
@app.route('/')
def home():
    return "I'm alive"  # ブラウザがアクセスすると "I'm alive" というテキストを返す

# Flaskアプリケーションを実行する関数を定義
def run():
    app.run(host='0.0.0.0', port=8080)  # すべてのホストからアクセス可能なポート8080でFlaskアプリケーションを実行

# ボットをオンラインに保つための関数を定義
def keep_alive():
    t = Thread(target=run)  # 新しいスレッドを作成し、run関数をそのターゲットに指定
    t.start()  # スレッドを開始し、Flaskアプリケーションをバックグラウンドで実行

Google Apps ScriptでPingを定期的に送信する設定を行う
下記のサイトが一番わかりやすかったので、そのまま貼らせていただきます。

https://x.gd/JRIbD

設定が終わったら、RUNボタンを押下し起動を行います。
なにもエラー文が出てこなければ、正常に起動されています。

まとめ

初めてボットを作ったので、至らない点などもあると思いますので、ご了承ください。
現在は自分のサーバー用にしか作っておりませんが、いずれはほかの人にも使ってもらえるようなBotにしていきたいです。

また、自分の好きなものを開発するのが一番楽しいと改めて気が付くことが出来ました。
みなさんも、自分でアイデアを出して開発する経験を積んでみましょう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?