feat(commands:misc|Dev): add random tests things
This commit is contained in:
parent
3240c61b20
commit
616a067bc2
2 changed files with 272 additions and 0 deletions
|
@ -1,6 +1,13 @@
|
||||||
import logging
|
import logging
|
||||||
|
import random
|
||||||
|
import string
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from discord.enums import ButtonStyle
|
||||||
|
from discord import ui, SelectOption
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from tuxbot.cogs.Dev.functions.utils import TicTacToe
|
||||||
from tuxbot.core.bot import Tux
|
from tuxbot.core.bot import Tux
|
||||||
from tuxbot.core.i18n import (
|
from tuxbot.core.i18n import (
|
||||||
Translator,
|
Translator,
|
||||||
|
@ -12,6 +19,57 @@ log = logging.getLogger("tuxbot.cogs.Dev")
|
||||||
_ = Translator("Dev", __file__)
|
_ = Translator("Dev", __file__)
|
||||||
|
|
||||||
|
|
||||||
|
class Test(ui.View):
|
||||||
|
@ui.button(label="label1", disabled=True, style=ButtonStyle.grey)
|
||||||
|
async def label1(self, button, interaction):
|
||||||
|
print("label1")
|
||||||
|
|
||||||
|
print(type(button), button)
|
||||||
|
print(type(interaction), interaction)
|
||||||
|
|
||||||
|
@ui.button(label="label2", style=ButtonStyle.danger)
|
||||||
|
async def label2(self, button, interaction):
|
||||||
|
print("label2")
|
||||||
|
|
||||||
|
print(type(button), button)
|
||||||
|
print(type(interaction), interaction)
|
||||||
|
|
||||||
|
|
||||||
|
class Test2(ui.View):
|
||||||
|
@ui.select(
|
||||||
|
placeholder="placeholder",
|
||||||
|
min_values=1,
|
||||||
|
max_values=3,
|
||||||
|
options=[
|
||||||
|
SelectOption(
|
||||||
|
label="label1",
|
||||||
|
value="value1",
|
||||||
|
description="description1",
|
||||||
|
),
|
||||||
|
SelectOption(
|
||||||
|
label="label2",
|
||||||
|
value="value2",
|
||||||
|
description="description2",
|
||||||
|
),
|
||||||
|
SelectOption(
|
||||||
|
label="label3",
|
||||||
|
value="value3",
|
||||||
|
description="description3",
|
||||||
|
),
|
||||||
|
SelectOption(
|
||||||
|
label="label4",
|
||||||
|
value="value4",
|
||||||
|
description="description4",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def select1(self, *args, **kwargs):
|
||||||
|
print("select1")
|
||||||
|
|
||||||
|
print(args)
|
||||||
|
print(kwargs)
|
||||||
|
|
||||||
|
|
||||||
class Dev(commands.Cog):
|
class Dev(commands.Cog):
|
||||||
def __init__(self, bot: Tux):
|
def __init__(self, bot: Tux):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
|
@ -29,3 +87,56 @@ class Dev(commands.Cog):
|
||||||
await ctx.send(str(int([]))) # type: ignore
|
await ctx.send(str(int([]))) # type: ignore
|
||||||
elif crash_type == "IndexError":
|
elif crash_type == "IndexError":
|
||||||
await ctx.send(str([0][5]))
|
await ctx.send(str([0][5]))
|
||||||
|
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
@command_extra(name="test", deletable=True)
|
||||||
|
@checks.is_owner()
|
||||||
|
async def _test(self, ctx: ContextPlus):
|
||||||
|
button = ui.Button(
|
||||||
|
style=ButtonStyle.primary,
|
||||||
|
label="test",
|
||||||
|
)
|
||||||
|
button2 = ui.Button(
|
||||||
|
style=ButtonStyle.secondary,
|
||||||
|
label="test2",
|
||||||
|
)
|
||||||
|
button3 = ui.Button(
|
||||||
|
style=ButtonStyle.green,
|
||||||
|
label="test3",
|
||||||
|
)
|
||||||
|
button4 = ui.Button(
|
||||||
|
style=ButtonStyle.blurple,
|
||||||
|
label="test4",
|
||||||
|
)
|
||||||
|
button5 = ui.Button(
|
||||||
|
style=ButtonStyle.danger,
|
||||||
|
label="test5",
|
||||||
|
)
|
||||||
|
|
||||||
|
view = ui.View()
|
||||||
|
view.add_item(button)
|
||||||
|
view.add_item(button2)
|
||||||
|
view.add_item(button3)
|
||||||
|
view.add_item(button4)
|
||||||
|
view.add_item(button5)
|
||||||
|
|
||||||
|
await ctx.send("test", view=view)
|
||||||
|
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
@command_extra(name="test2", deletable=True)
|
||||||
|
@checks.is_owner()
|
||||||
|
async def _test2(self, ctx: ContextPlus):
|
||||||
|
await ctx.send(view=Test2())
|
||||||
|
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
@command_extra(name="test3", deletable=False)
|
||||||
|
async def _test3(self, ctx: ContextPlus, opponent: discord.Member):
|
||||||
|
game = await ctx.send(f"Turn: {ctx.author}")
|
||||||
|
game_id = "".join(random.choices(string.ascii_letters, k=10))
|
||||||
|
|
||||||
|
view = TicTacToe(ctx.message.author, opponent, game, game_id=game_id)
|
||||||
|
|
||||||
|
await game.edit(content=f"Turn: {ctx.author}", view=view)
|
||||||
|
|
161
tuxbot/cogs/Dev/functions/utils.py
Normal file
161
tuxbot/cogs/Dev/functions/utils.py
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
from typing import List, Optional, Dict
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from discord import ui
|
||||||
|
from discord.enums import ButtonStyle
|
||||||
|
|
||||||
|
|
||||||
|
class TicTacToe(ui.View):
|
||||||
|
turn: int = 0
|
||||||
|
grid: Dict[str, List[List[Optional[int]]]] = {}
|
||||||
|
win: bool = False
|
||||||
|
|
||||||
|
def __init__(self, player: discord.Member, opponent: discord.Member,
|
||||||
|
game: discord.Message, game_id: str):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.player = player
|
||||||
|
self.opponent = opponent
|
||||||
|
self.game = game
|
||||||
|
|
||||||
|
self.game_id = game_id
|
||||||
|
|
||||||
|
self.init_grid()
|
||||||
|
|
||||||
|
def init_grid(self):
|
||||||
|
self.grid[self.game_id]: List[List[Optional[int]]] = [
|
||||||
|
[None for _ in range(3)]
|
||||||
|
for _ in range(3)
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_grid(self):
|
||||||
|
return self.grid[self.game_id]
|
||||||
|
|
||||||
|
def get_turn(self):
|
||||||
|
return self.player if self.turn == 0 else self.opponent
|
||||||
|
|
||||||
|
def get_emoji(self):
|
||||||
|
return "❌" if self.turn == 0 else "⭕"
|
||||||
|
|
||||||
|
def check_win(self):
|
||||||
|
wins = [
|
||||||
|
[self.get_grid()[0][0], self.get_grid()[0][1], self.get_grid()[0][2]],
|
||||||
|
[self.get_grid()[1][0], self.get_grid()[1][1], self.get_grid()[1][2]],
|
||||||
|
[self.get_grid()[2][0], self.get_grid()[2][1], self.get_grid()[2][2]],
|
||||||
|
[self.get_grid()[0][0], self.get_grid()[1][0], self.get_grid()[2][0]],
|
||||||
|
[self.get_grid()[0][1], self.get_grid()[1][1], self.get_grid()[2][1]],
|
||||||
|
[self.get_grid()[0][2], self.get_grid()[1][2], self.get_grid()[2][2]],
|
||||||
|
[self.get_grid()[0][0], self.get_grid()[1][1], self.get_grid()[2][2]],
|
||||||
|
[self.get_grid()[2][0], self.get_grid()[1][1], self.get_grid()[0][2]],
|
||||||
|
]
|
||||||
|
|
||||||
|
return [self.turn, self.turn, self.turn] in wins
|
||||||
|
|
||||||
|
async def congrats(self):
|
||||||
|
self.win = True
|
||||||
|
del self.grid[self.game_id]
|
||||||
|
|
||||||
|
await self.game.edit(
|
||||||
|
content=f"{self.get_turn()} wins!",
|
||||||
|
view=self
|
||||||
|
)
|
||||||
|
|
||||||
|
def set_pos(self, i, j):
|
||||||
|
self.get_grid()[i][j] = self.turn
|
||||||
|
|
||||||
|
async def next_turn(self, i, j):
|
||||||
|
if self.win:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.set_pos(i, j)
|
||||||
|
|
||||||
|
if self.check_win():
|
||||||
|
return await self.congrats()
|
||||||
|
|
||||||
|
self.turn = 1 if self.turn == 0 else 0
|
||||||
|
|
||||||
|
await self.game.edit(
|
||||||
|
content=f"Turn {self.get_turn()}",
|
||||||
|
view=self
|
||||||
|
)
|
||||||
|
|
||||||
|
# =========================================================================
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=1)
|
||||||
|
async def button_1(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(0, 0)
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=1)
|
||||||
|
async def button_2(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(0, 1)
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=1)
|
||||||
|
async def button_3(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(0, 2)
|
||||||
|
|
||||||
|
# =========================================================================
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=2)
|
||||||
|
async def button_4(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(1, 0)
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=2)
|
||||||
|
async def button_5(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(1, 1)
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=2)
|
||||||
|
async def button_6(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(1, 2)
|
||||||
|
|
||||||
|
# =========================================================================
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=3)
|
||||||
|
async def button_7(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(2, 0)
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=3)
|
||||||
|
async def button_8(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(2, 1)
|
||||||
|
|
||||||
|
@ui.button(label="•", style=ButtonStyle.grey, group=3)
|
||||||
|
async def button_9(self, button: ui.Button,
|
||||||
|
interaction: discord.Interaction):
|
||||||
|
if button.label == "•" and interaction.user == self.get_turn():
|
||||||
|
button.label = ""
|
||||||
|
button.emoji = self.get_emoji()
|
||||||
|
await self.next_turn(2, 2)
|
Loading…
Reference in a new issue