Edited at

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

初投稿です。

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(611187520914587648)
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



結果

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

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


おわりに

初めてDiscordのBotを作ってみましたが、思ったより気軽に作れて楽しかったです。

サイコロの総和の計算だったり、命令の受取方だったりいろいろ不格好な場所があるので、これからよりPythonを精進して改良していければなと思います。

他にも色々Bot作ってみたい。


参考

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


Pythonで簡単なDiscord Botの作り方

https://qiita.com/PinappleHunter/items/af4ccdbb04727437477f

Discord Bot 最速チュートリアル【Python&Heroku&GitHub】

https://qiita.com/1ntegrale9/items/aa4b373e8895273875a8