はじめに
趣味の領域を出たことがないので、もっときれいに書けるとかありましたら優しく教えて下さい。
やりたいこと
discord.pyとchessのパッケージを使用してDiscord上でchessの対戦ができるようにする
準備
discord developer portalで登録を済ませトークンを取る
discord.pyのインストールpy -3 -m pip install -U discord.py
chessのパッケージインストールpy -m pip install chess
コード
import discord
import chess
from discord.ext import commands
token = "token"
bot = commands.Bot(command_prefix="!")
board = None
@bot.event
async def on_ready():
print("ready")
@bot.command()
async def start(ctx):
global board
board = chess.Board()
await ctx.send("ボードを作成しました")
await ctx.send("```" + str(board) + "```")
@bot.command()
async def move(ctx,movePos):
global board
if board == None:
await ctx.send("ボードが作成されていません")
return
try:
board.push_san(movePos)
await ctx.send("```" + str(board) + "```")
except:
await ctx.send(movePos + "は有効な値ではありません")
a = ""
for i in board.legal_moves:
a += str(i) + ","
await ctx.send("> " + a)
if board.is_game_over():
await ctx.send("game over")
board = None
bot.run(token)
結果
#つまづいたところ
自分の書いたのは間違っていないのに何やらいっぱいエラーが出てくる(connector.pyやhttp.py)
解決方法
原因はSSL証明書の期限切れらしいから新しい証明書をインストールすればいい
- IEを管理者権限で実行
- 鍵マークのところを押して証明書を表示
- インストール
最後に
有効な値を取得できなかった際にlegal_moves
を使い移動できる場所をそのまま表示させていたけれど、不必要なものまで表示されてしまったからforで回して結合していった。あそこの部分は綺麗に書ける気がする。
せっかくctxでユーザ情報を取得できているのでdict利用してユーザごとの勝敗など作ってみたい。
参考
https://discord.com/
https://pypi.org/project/chess/
https://teratail.com/questions/267889