You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.5 KiB
94 lines
2.5 KiB
import asyncio
|
|
import random
|
|
|
|
import discord
|
|
from redbot.core import commands
|
|
from typing import Any
|
|
|
|
Cog: Any = getattr(commands, "Cog", object)
|
|
|
|
|
|
class RPSLS(Cog):
|
|
"""Play Rock Paper Scissors Lizard Spock."""
|
|
|
|
weaknesses = {
|
|
"rock": [
|
|
"paper",
|
|
"spock"
|
|
],
|
|
"paper": [
|
|
"scissors",
|
|
"lizard"
|
|
],
|
|
"scissors": [
|
|
"spock",
|
|
"rock"
|
|
],
|
|
"lizard": [
|
|
"scissors",
|
|
"rock"
|
|
],
|
|
"spock": [
|
|
"paper",
|
|
"lizard"
|
|
]
|
|
}
|
|
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
|
|
@commands.command()
|
|
async def rpsls(self, ctx: commands.Context, choice: str):
|
|
"""
|
|
Play Rock Paper Scissors Lizard Spock by Sam Kass in Discord!
|
|
|
|
Rules:
|
|
Scissors cuts Paper
|
|
Paper covers Rock
|
|
Rock crushes Lizard
|
|
Lizard poisons Spock
|
|
Spock smashes Scissors
|
|
Scissors decapitates Lizard
|
|
Lizard eats Paper
|
|
Paper disproves Spock
|
|
Spock vaporizes Rock
|
|
And as it has always Rock crushes Scissors
|
|
"""
|
|
|
|
player_choice = choice.lower()
|
|
player_emote = self.get_emote(player_choice)
|
|
if player_emote is None:
|
|
await ctx.maybe_send_embed("Invalid Choice")
|
|
return
|
|
|
|
bot_choice = random.choice(list(self.weaknesses.keys()))
|
|
bot_emote = self.get_emote(bot_choice)
|
|
message = '{} vs. {}, who will win?'.format(player_emote, bot_emote)
|
|
em = discord.Embed(description=message, color=discord.Color.blue())
|
|
await ctx.send(embed=em)
|
|
await asyncio.sleep(2)
|
|
if player_choice in self.weaknesses[bot_choice]:
|
|
message = 'You win! :sob:'
|
|
em_color = discord.Color.green()
|
|
elif bot_choice in self.weaknesses[player_choice]:
|
|
message = 'I win! :smile:'
|
|
em_color = discord.Color.red()
|
|
else:
|
|
message = 'It\'s a draw! :neutral_face:'
|
|
em_color = discord.Color.blue()
|
|
em = discord.Embed(description=message, color=em_color)
|
|
await ctx.send(embed=em)
|
|
|
|
def get_emote(self, choice):
|
|
if choice == 'rock':
|
|
emote = ':moyai:'
|
|
elif choice == 'spock':
|
|
emote = ':vulcan:'
|
|
elif choice == 'paper':
|
|
emote = ':page_facing_up:'
|
|
elif choice in ['scissors', 'lizard']:
|
|
emote = ':{}:'.format(choice)
|
|
else:
|
|
emote = None
|
|
return emote
|