初投稿です。
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の作成
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)
次に和を計算する関数の内容です。
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