Merge branch 'master' of github.com:NikolajDanger/Gwendolyn
This commit is contained in:
@ -100,5 +100,10 @@ class GamesCog(commands.Cog):
|
|||||||
async def hexCommand(self, ctx, *, content = ""):
|
async def hexCommand(self, ctx, *, content = ""):
|
||||||
await self.client.gameLoops.runHex(ctx.message.channel,content,"#"+str(ctx.message.author.id))
|
await self.client.gameLoops.runHex(ctx.message.channel,content,"#"+str(ctx.message.author.id))
|
||||||
|
|
||||||
|
# Runs a game of Love Letter
|
||||||
|
@commands.command(aliases = ["ll"])
|
||||||
|
async def loveletter(self, ctx, *, content = ""):
|
||||||
|
await self.client.gameLoops.runLoveletter(ctx.message.channel,content,"#"+str(ctx.message.author.id),ctx.message.author)
|
||||||
|
|
||||||
def setup(client):
|
def setup(client):
|
||||||
client.add_cog(GamesCog(client))
|
client.add_cog(GamesCog(client))
|
@ -176,6 +176,7 @@ class GameLoops():
|
|||||||
logThis("Error parsing command (error code 1510)")
|
logThis("Error parsing command (error code 1510)")
|
||||||
|
|
||||||
await channel.send(response)
|
await channel.send(response)
|
||||||
|
|
||||||
logThis(response,str(channel.id))
|
logThis(response,str(channel.id))
|
||||||
if showImage:
|
if showImage:
|
||||||
if deleteImage:
|
if deleteImage:
|
||||||
@ -203,11 +204,47 @@ class GameLoops():
|
|||||||
f.write(str(oldImage.id))
|
f.write(str(oldImage.id))
|
||||||
|
|
||||||
if gameDone:
|
if gameDone:
|
||||||
game = self.bot.database["hexGames"].find_one({"_id":str(channel.id)})
|
game = self.bot.database["hex games"].find_one({"_id":str(channel.id)})
|
||||||
print(game)
|
|
||||||
winner = game["winner"]
|
winner = game["winner"]
|
||||||
if winner != 0 and game["players"][0] != game["players"][1]: # player1 != player2
|
if winner != 0 and game["players"][0] != game["players"][1]: # player1 != player2
|
||||||
winnings = game["difficulty"]*10
|
winnings = game["difficulty"]*10
|
||||||
self.bot.money.addMoney(game["players"][winner-1].lower(),winnings)
|
self.bot.money.addMoney(game["players"][winner-1].lower(),winnings)
|
||||||
|
|
||||||
self.bot.funcs.deleteGame("hex games",str(channel.id))
|
self.bot.funcs.deleteGame("hex games",str(channel.id))
|
||||||
|
|
||||||
|
|
||||||
|
# Runs Love letter
|
||||||
|
async def runLoveletter(self,channel,command,user,userchannel):
|
||||||
|
try:
|
||||||
|
response, showImage, deleteImage = self.bot.loveletter.parseLove(command,str(channel.id),user,userchannel)
|
||||||
|
except:
|
||||||
|
logThis("Error parsing command (error code 1810)")
|
||||||
|
|
||||||
|
await channel.send(response)
|
||||||
|
logThis(response,str(channel.id))
|
||||||
|
if showImage:
|
||||||
|
if deleteImage:
|
||||||
|
await self.deleteMessage("loveletter"+str(channel.id),channel)
|
||||||
|
oldImage = await channel.send(file = discord.File("resources/games/loveletterBoards/loveletterBoard"+str(channel.id)+".png"))
|
||||||
|
|
||||||
|
if len(remainingLetters) > 15:
|
||||||
|
otherMessage = await channel.send("_ _")
|
||||||
|
reactionMessages = {oldImage : remainingLetters[:15],otherMessage : remainingLetters[15:]}
|
||||||
|
else:
|
||||||
|
otherMessage = ""
|
||||||
|
reactionMessages = {oldImage : remainingLetters}
|
||||||
|
|
||||||
|
oldMessages = str(oldImage.id)
|
||||||
|
if otherMessage != "":
|
||||||
|
oldMessages += "\n"+str(otherMessage.id)
|
||||||
|
with open("resources/games/oldImages/hangman"+str(channel.id), "w") as f:
|
||||||
|
f.write(oldMessages)
|
||||||
|
|
||||||
|
try:
|
||||||
|
for message, letters in reactionMessages.items():
|
||||||
|
for letter in letters:
|
||||||
|
emoji = chr(ord(letter)+127397)
|
||||||
|
await message.add_reaction(emoji)
|
||||||
|
except:
|
||||||
|
logThis("Image deleted before adding all reactions")
|
@ -22,7 +22,6 @@ class HexGame():
|
|||||||
def parseHex(self, command, channel, user):
|
def parseHex(self, command, channel, user):
|
||||||
commands = command.lower().split()
|
commands = command.lower().split()
|
||||||
game = self.bot.database["hex games"].find_one({"_id":channel})
|
game = self.bot.database["hex games"].find_one({"_id":channel})
|
||||||
|
|
||||||
if command == "" or command == " ":
|
if command == "" or command == " ":
|
||||||
return "I didn't get that. Use \"!hex start [opponent]\" to start a game.", False, False, False, False
|
return "I didn't get that. Use \"!hex start [opponent]\" to start a game.", False, False, False, False
|
||||||
|
|
||||||
@ -231,8 +230,9 @@ class HexGame():
|
|||||||
logThis("Undoing {}'s last move".format(self.bot.funcs.getName(user)))
|
logThis("Undoing {}'s last move".format(self.bot.funcs.getName(user)))
|
||||||
|
|
||||||
lastMove = game["gameHistory"].pop()
|
lastMove = game["gameHistory"].pop()
|
||||||
|
game["board"][lastMove[0]][lastMove[1]] = 0
|
||||||
self.bot.database["hex games"].update_one({"_id":channel},
|
self.bot.database["hex games"].update_one({"_id":channel},
|
||||||
{"$set":{"board."+lastMove[0]+"."+lastMove[1]:0}})
|
{"$set":{"board":game["board"]}})
|
||||||
self.bot.database["hex games"].update_one({"_id":channel},
|
self.bot.database["hex games"].update_one({"_id":channel},
|
||||||
{"$set":{"turn":turn%2 + 1}})
|
{"$set":{"turn":turn%2 + 1}})
|
||||||
|
|
||||||
|
81
funcs/games/loveletter.py
Normal file
81
funcs/games/loveletter.py
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
|
from funcs import logThis
|
||||||
|
from .loveletterDraw import DrawLove
|
||||||
|
|
||||||
|
class LoveLetter():
|
||||||
|
def __init__(self,bot):
|
||||||
|
self.bot = bot
|
||||||
|
self.draw = DrawLove(bot)
|
||||||
|
|
||||||
|
# Parses command
|
||||||
|
def parseLove(self, command, channel, user, userchannel):
|
||||||
|
commands = command.lower().split()
|
||||||
|
game = self.bot.database["loveletter games"].find_one({"_id":channel})
|
||||||
|
|
||||||
|
if command == "" or command == " ":
|
||||||
|
logThis(str(user)+" created a Love Letter game with loveStart(). ")
|
||||||
|
return self.loveStart(channel)
|
||||||
|
|
||||||
|
# If using a command with no game, return error
|
||||||
|
elif game == None:
|
||||||
|
return "There's no game in this channel", False, False
|
||||||
|
|
||||||
|
# Joining the game
|
||||||
|
elif commands[0] == "join":
|
||||||
|
if game["round"] == 0:
|
||||||
|
if user not in game["player hands"]:
|
||||||
|
# Deal cards
|
||||||
|
card = game["deck"].pop()
|
||||||
|
username = self.bot.funcs.getName(user)
|
||||||
|
game["player hands"][username] = card
|
||||||
|
game["discard piles"][username] = []
|
||||||
|
game["user channel"][username] = userchannel # Used for direct (private) messages to the users
|
||||||
|
self.bot.database["loveletter games"].replace_one({"_id":channel},game)
|
||||||
|
return username+" joined the game! Type \"!loveletter begin\" once all players have joined.", False, False
|
||||||
|
else:
|
||||||
|
return "You're already playing!", False, False
|
||||||
|
else:
|
||||||
|
return "It's too late to join", False, False
|
||||||
|
|
||||||
|
# Beginning the game
|
||||||
|
elif commands[0] == "begin":
|
||||||
|
if user in game["player hands"]:
|
||||||
|
if len(game["player hands"]) > 1:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
return "AI functionality hasn't been implemented yet. Get another player to join!", False, False
|
||||||
|
else:
|
||||||
|
return "You can't begin a game, when you're not a player!", False, False
|
||||||
|
|
||||||
|
# Stopping the game
|
||||||
|
elif commands[0] == "stop":
|
||||||
|
if user in game["player hands"]:
|
||||||
|
return "Ending game.", False, False
|
||||||
|
else:
|
||||||
|
return "You can't end a game where you're not a player.", False, False
|
||||||
|
|
||||||
|
else:
|
||||||
|
return "I didn't get that. Use \"!loveletter\" to start a game or \"!loveletter join\" to join a game. ", False, False
|
||||||
|
|
||||||
|
# Starts the game
|
||||||
|
def loveStart(self, channel):
|
||||||
|
game = self.bot.database["loveletter games"].find_one({"_id":channel})
|
||||||
|
|
||||||
|
if game == None:
|
||||||
|
|
||||||
|
|
||||||
|
deck = [1,1,1,1,1, 2,2, 3,3, 4,4, 5,5, 6, 7, 8]
|
||||||
|
random.shuffle(deck)
|
||||||
|
cardAside = deck[0]
|
||||||
|
del deck[0] # The card that is set aside
|
||||||
|
|
||||||
|
newGame = {"_id":channel,"player hands": {},"discard piles":{},"deck":deck,"round":0,"cardAside":cardAside}
|
||||||
|
|
||||||
|
self.bot.database["loveletter games"].insert_one(newGame)
|
||||||
|
|
||||||
|
return ""
|
||||||
|
else:
|
||||||
|
logThis("There's already a Love Letter game going on in this channel",str(channel))
|
||||||
|
return "There's already a Love Letter game going on in this channel"
|
||||||
|
|
15
funcs/games/loveletterDraw.py
Normal file
15
funcs/games/loveletterDraw.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import math
|
||||||
|
|
||||||
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
from funcs import logThis
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class DrawLove():
|
||||||
|
def __init__(self,bot):
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
def drawBoard(self, channel):
|
||||||
|
logThis("Drawing empty Hex board")
|
@ -137,3 +137,7 @@
|
|||||||
1714 - Error in drawMisses()
|
1714 - Error in drawMisses()
|
||||||
1720 - Unspecified hangmanGuess() error
|
1720 - Unspecified hangmanGuess() error
|
||||||
1730 - Unspecified hangmanStart() error
|
1730 - Unspecified hangmanStart() error
|
||||||
|
|
||||||
|
18 - Love Letter
|
||||||
|
1800 - Unspecified error
|
||||||
|
1801 - Error parsing command
|
||||||
|
Reference in New Issue
Block a user