PythonでnDnダイスを作る & DiscordBotに実装
目次
0.前置き
1.コード
2.まとめ
最終更新:20190218
0.前置き
何か決めるときに何かと便利なnDnダイス、でもいざ振ろうとしても近くに無い。じゃあ作って置いておこう
1.コード
randomとre(正規表現)のライブラリを使用する
nDnDICE.py
# coding: utf-8
import random
import re
pattern = '\d{1,2}d\d{1,3}|\d{1,2}D\d{1,3}'
split_pattern = 'd|D'
# 対象の文字列かどうか
def judge_nDn(src):
repatter = re.compile(pattern)
result = repatter.fullmatch(src)
if result is not None:
return True
elif src == '1d114514' or src == '1D114514':
return True
return False
# 何面ダイスを何回振るか
def split_nDn(src):
return re.split(split_pattern,src)
# ダイスを振る
def role_nDn(src):
result = []
sum_dice = 0
role_index = split_nDn(src)
role_count = int(role_index[0])
nDice = int(role_index[1])
for i in range(role_count):
tmp = random.randint(1,nDice)
result.append(tmp)
sum_dice = sum_dice + tmp
is1dice = True if role_count == 1 else False
return result,sum_dice,is1dice
def nDn(text):
if judge_nDn(text):
result,sum_dice,is1dice = role_nDn(text)
if is1dice:
return 'ダイス:' + text + '\n出目:' + str(sum_dice)
else:
return 'ダイス:' + text + '\n出目:' + str(result) + '\n合計:' + str(sum_dice)
else:
return None
textにnDnの形式の文字列を渡してやれば振ってくれます。非対象の文字列の場合はNoneが返ります。
例:"3d6" や "2D100" など
使用例
main.py
# coding: utf-8
import nDnDICE
text = "3d100"
def main():
result = nDnDICE.nDn(text)
if result is not None:
print(result)
if __name__ == "__main__":
main()
正規表現パターンについて
pattern = '\d{1,2}d\d{1,3}|\d{1,2}D\d{1,3}'
対象の文字列は{1~2桁の数字}{"d" または "D"}{1~3桁の数字}
分かりづらい?要は最低1d1、最大99d999までOK
0については対策してません。0d0とかしないでね(多分Noneが返る)
一番手軽く振れるのはやはりDiscord(メンバーに見える点も○)なのでDiscordBot用に書いてみる。
DiscordBotの導入については Discordのサーバーリージョンをコマンドで変更できるbotを作る の項1を見てね。
discordDice.py (同じ階層にnDnDICE.pyを置いておく)
import discord
import nDnDICE
client = discord.Client()
@client.event
async def on_ready():
print('Botを起動しました。')
@client.event
async def on_message(message):
msg = message.content
result = nDnDICE.nDn(msg)
if result is not None:
await client.send_message(message.channel, result)
#ここにbotのアクセストークンを入力
client.run('***')
試運転
2.まとめ
今回のコード
nDn-Dice - akaness1git GitHub
参考記事
分かりやすいpythonの正規表現の例
この記事が気に入ったらサポートをしてみませんか?