9
7

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 5 years have passed since last update.

初心者がサイコロを振るDiscord Botを作った

Last updated at Posted at 2019-09-07

初投稿です。
Python初心者故至らぬ点等多々あると思いますが、気軽に読んでくださると幸いです。
アドバイス等していただけるととても嬉しいです。

2019/09/09 受け取ったメッセージのサイコロの面数と個数を変数に受け渡す所と、サイコロの目の総和を計算する部分を改良しました。素晴らしいアドバイスありがとうございます!

今回作るものの目標

Discordで!dice AdB(Aはさいころの個数、Bはさいころの面数、ABともに1以上)と入力すると、サイコロを振った結果を表示するBotを作る。

環境

  • Windows10
  • discord.py 1.2.3
  • Python 3.7.3

事前準備

botの準備

Pythonで簡単なDiscord Botの作り方
https://qiita.com/PinappleHunter/items/af4ccdbb04727437477f
Discord Bot 最速チュートリアル【Python&Heroku&GitHub】
https://qiita.com/1ntegrale9/items/aa4b373e8895273875a8

この記事がとてもわかりやすいです。

botの作成

main.py
import discord
import sys

# さいころの和を計算する用の関数
from func import  diceroll

TOKEN = '任意のトークン'

client = discord.Client()

@client.event
async def on_ready():
    print('--------------')
    print('ログインしました')
    print(client.user.name)
    print(client.user.id)
    print('--------------')
    channel = client.get_channel('チャンネルID')
    await channel.send('楽しいTRPGを始めましょう!')

@client.event
async def on_message(message):
    if message.author.bot:
        return
    if message.content.startswith("!dice"):
        # 入力された内容を受け取る
        say = message.content 

        # [!dice ]部分を消し、AdBのdで区切ってリスト化する
        order = say.strip('!dice ')
        cnt, mx = list(map(int, order.split('d'))) # さいころの個数と面数
        dice = diceroll(cnt, mx) # 和を計算する関数(後述)
        await message.channel.send(dice[cnt])
        del dice[cnt]

        # さいころの目の総和の内訳を表示する
        await message.channel.send(dice)

client.run(TOKEN)

次に和を計算する関数の内容です。

func.py
import random

def diceroll(cnt, max):
    total = 0
    num_list = []
    for i in range(0, cnt):
        # ランダムに1からサイコロの面数までの和を取得しリストに入れる
        num = random.randint(1, max)
        num_list.append(num)
    # さいころの目の総和を計算しリストに入れる
    total = sum(num_list)
    num_list.append(total)
    return num_list

結果

ちゃんと総和、内訳ともに表示しました。
saikoro_bot.PNG

ちなみに100d100くらい大きくてもでも表示してくれます。(そんなことしないだろうけど)
saikoro_bot2.PNG

おわりに

初めてDiscordのBotを作ってみましたが、思ったより気軽に作れて楽しかったです。
サイコロの総和の計算だったり、命令の受取方だったりいろいろ不格好な場所があるので、これからよりPythonを精進して改良していければなと思います。
他にも色々Bot作ってみたい。

参考

事前準備で述べたすばらしい記事及びそのサンプルコード

Pythonで簡単なDiscord Botの作り方
https://qiita.com/PinappleHunter/items/af4ccdbb04727437477f
Discord Bot 最速チュートリアル【Python&Heroku&GitHub】
https://qiita.com/1ntegrale9/items/aa4b373e8895273875a8

9
7
2

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
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?