From 51423dedf07ccc3797199320832891b60499ff60 Mon Sep 17 00:00:00 2001 From: victormylle Date: Tue, 10 Nov 2020 16:01:07 +0100 Subject: [PATCH 1/3] Made big improvement to quiz --- cogs/quiz.py | 73 +++++++++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 43 deletions(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index 40c4f14..10132d0 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -75,9 +75,8 @@ class QuizQuestions(commands.Cog): class Quiz(commands.Cog): def __init__(self, client): self.client = client - self.in_progress = False - #self.interval = (5, 10) - self.interval = (8*60, 30*60) + self.interval = (5, 10) + #self.interval = (8*60, 30*60) self.auto = False @commands.command(name="quiz") @@ -97,64 +96,52 @@ class Quiz(commands.Cog): @commands.Cog.listener() async def on_ready(self): self.auto = True - casyncio.create_task(self.start_auto_quiz() + asyncio.create_task(self.start_auto_quiz()) async def ask_question(self): - self.question = self.get_random_question() + question = self.get_random_question() - self.increment_asked_count(self.question[0]) + self.increment_asked_count(question[0]) channel = self.client.get_channel(constants.QuizChannelID) - self.in_progress = True answer_timer = Timer(1, 0) embed = discord.Embed() #embed.set_author(name="Quiz") embed.colour = discord.Colour.orange() - embed.add_field(name="Question:", value=f"{self.question[1]}", inline=False) - embed.add_field(name="Reward:", value=f"${self.question[3]}", inline=False) - self.embed = embed + embed.add_field(name="Question:", value=f"{question[1]}", inline=False) + embed.add_field(name="Reward:", value=f"${question[3]}", inline=False) + await channel.send(embed=embed) - answer_timer.start() - while not answer_timer.ended and self.in_progress: - await asyncio.sleep(1) - if (not answer_timer.ended): - answer_timer.stop() + message = await self.client.wait_for("message", check=lambda message: message.content.lower() == question[2].lower()) + + embed.add_field(name="Answer:", value=f"{question[2]}", inline=False) + + if (message): + self.give_reward(message.author.id, question[3]) + + playerdblinker = PlayerDBLinker() + embed.colour = discord.Colour.green() + if playerdblinker.discordidused(message.author.id): + embed.add_field(name="Winner:", value=f"{message.author.mention} 🎉🎉", inline=False) + #self.embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft by using /redeem") + embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft when the server is online") + await message.channel.send(embed=embed) + else: + + embed.add_field(name="Winner:", value=f"{message.author.mention} 🎉🎉", inline=False) + #self.embed.add_field(name="Claim:", value=f"1. Link your account by using /link \n2. Claim your reward in Minecraft by using /redeem") + embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft when the server is online") + await message.channel.send(embed=embed) + playerdblinker.close() else: - self.in_progress = False embed.colour = discord.Colour.red() - embed.add_field(name="Answer:", value=f"{self.question[2]}", inline=False) + embed.add_field(name="Answer:", value=f"{question[2]}", inline=False) await channel.send(embed=embed) - @commands.Cog.listener() - async def on_message(self, message): - if message.author == self.client.user: - return - if self.in_progress and message.channel.id == constants.QuizChannelID: - if message.content.lower() == self.question[2].lower(): - self.in_progress = False - - self.give_reward(message.author.id, self.question[3]) - - playerdblinker = PlayerDBLinker() - self.embed.colour = discord.Colour.green() - if playerdblinker.discordidused(message.author.id): - self.embed.add_field(name="Answer:", value=f"{self.question[2]}", inline=False) - self.embed.add_field(name="Winner:", value=f"{message.author.mention} 🎉🎉", inline=False) - #self.embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft by using /redeem") - self.embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft when the server is online") - await message.channel.send(embed=self.embed) - else: - self.embed.add_field(name="Answer:", value=f"{self.question[2]}", inline=False) - self.embed.add_field(name="Winner:", value=f"{message.author.mention} 🎉🎉", inline=False) - #self.embed.add_field(name="Claim:", value=f"1. Link your account by using /link \n2. Claim your reward in Minecraft by using /redeem") - self.embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft when the server is online") - await message.channel.send(embed=self.embed) - playerdblinker.close() - def increment_asked_count(self, q_id): quizdb = QuizDB() quizdb.question_asked_increment(q_id) From 86a8ce45e399927c8426b72f0b1aab26f991b7b4 Mon Sep 17 00:00:00 2001 From: victormylle Date: Tue, 10 Nov 2020 17:53:41 +0100 Subject: [PATCH 2/3] Made quiz ready for release --- DiscordVerifier/src/DatabaseConnection.java | 63 +++++++++++++++++++++ cogs/quiz.py | 8 +-- 2 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 DiscordVerifier/src/DatabaseConnection.java diff --git a/DiscordVerifier/src/DatabaseConnection.java b/DiscordVerifier/src/DatabaseConnection.java new file mode 100644 index 0000000..1a97b64 --- /dev/null +++ b/DiscordVerifier/src/DatabaseConnection.java @@ -0,0 +1,63 @@ +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class DatabaseConnection { + + + public String get_discord_id(Player p){ + try (Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.1.251/worldcraft_discord", "worldcraft_discord", "aquev5vcwhLwTdRt")) { + PreparedStatement stmt = conn.prepareStatement("SELECT discordid FROM playerlinks WHERE minecraftUUID=?"); + stmt.setString(1, p.getUniqueId().toString()); + ResultSet res = stmt.executeQuery(); + if (res.next()){ + return res.getString("discordid"); + }else{ + return null; + } + }catch(Exception e){ + System.out.println("Exception: " + e); + } + + return null; + } + + public int get_reward(String discordid){ + + + try (Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.1.251/worldcraft_discord", "worldcraft_discord", "aquev5vcwhLwTdRt")) { + PreparedStatement stmt = conn.prepareStatement("SELECT toclaim FROM quizplayers WHERE discordid=?"); + stmt.setString(1, discordid); + ResultSet res = stmt.executeQuery(); + if (res.next()) { + return res.getInt("toclaim"); + }else{ + return -1; + } + + }catch(Exception e){ + System.out.println("Exception: " + e); + } + + return -1; + } + + public void remove_toclaim(String discordid){ + + try (Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.1.251/worldcraft_discord", "worldcraft_discord", "aquev5vcwhLwTdRt")) { + PreparedStatement stmt = conn.prepareStatement("UPDATE quizplayers SET toclaim = 0 WHERE discordid=?"); + stmt.setString(1, discordid); + stmt.executeUpdate(); + }catch(Exception e){ + System.out.println("Exception: " + e); + } + + } + + + +} diff --git a/cogs/quiz.py b/cogs/quiz.py index 10132d0..6e1ddb6 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -39,8 +39,8 @@ class QuizQuestions(commands.Cog): quizdb = QuizDB() q_id = quizdb.add_question(q, a, reward) await ctx.send("question id: " + str(q_id)) - # except: - # await ctx.send("Something went wrong") + except: + await ctx.send("Something went wrong") finally: quizdb.close() @@ -75,8 +75,8 @@ class QuizQuestions(commands.Cog): class Quiz(commands.Cog): def __init__(self, client): self.client = client - self.interval = (5, 10) - #self.interval = (8*60, 30*60) + #self.interval = (5, 10) + self.interval = (8*60, 30*60) self.auto = False @commands.command(name="quiz") From b1540e1f090739c5b43658d78bdecc1abc02e1cc Mon Sep 17 00:00:00 2001 From: victormylle Date: Tue, 10 Nov 2020 19:01:03 +0100 Subject: [PATCH 3/3] Fixed some issues --- cogs/playerlink.py | 8 +++++ cogs/quiz.py | 77 +++++++++++++++++++++++----------------------- data/constants.py | 1 + 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/cogs/playerlink.py b/cogs/playerlink.py index 1fd3d73..f69983b 100755 --- a/cogs/playerlink.py +++ b/cogs/playerlink.py @@ -62,6 +62,14 @@ class PlayerLink(commands.Cog): channelid = ctx.channel.id authorid = ctx.author.id + + dbLinker = PlayerDBLinker() + if dbLinker.discordidused(authorid): + await ctx.send(f"{ctx.author.mention}, your account is already linked!") + dbLinker.close() + return + + code = get_random_string(8) diff --git a/cogs/quiz.py b/cogs/quiz.py index 6e1ddb6..6e7e829 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -12,43 +12,38 @@ class QuizQuestions(commands.Cog): def __init__(self, client): self.client = client - @commands.group(name="q&a",case_insensitive=True, invoke_without_command=True) + @commands.group(name="questions",case_insensitive=True, invoke_without_command=True) @commands.check(checks.isModPlus) # /q&a add "What is ...." "Australia" - async def questions(self, ctx, f, *args): - if (f == "add"): - if (len(args) == 2): - await self.add_question(ctx, args[0], args[1]) - elif (len(args) == 3): - await self.add_question(ctx, args[0], args[1], args[2]) - else: - await ctx.send("Wrong amount of arguments") - elif (f == "rm"): - if (len(args) == 1): - await self.rm_question(ctx, args[0]) - else: - await ctx.send("Wrong amount of arguments") - elif (f == "show"): - if (len(args) == 0): - await self.show_questions(ctx) - else: - await ctx.send("Wrong amount of arguments") + async def questions(self, ctx, *args): + pass + @questions.command(name="add") + @commands.check(checks.isModPlus) async def add_question(self, ctx, q, a, reward=50): try: quizdb = QuizDB() q_id = quizdb.add_question(q, a, reward) - await ctx.send("question id: " + str(q_id)) + embed = discord.Embed() + embed.colour = discord.Colour.green() + embed.add_field(name="Success", value=f"Added question with {q_id}", inline=False) + await ctx.send(embed=embed) except: await ctx.send("Something went wrong") finally: quizdb.close() + + @questions.command(name="rm") + @commands.check(checks.isModPlus) async def rm_question(self, ctx, id): try: quizdb = QuizDB() quizdb.rm_question(id) - await ctx.send("question removed") + embed = discord.Embed() + embed.colour = discord.Colour.green() + embed.add_field(name="Success", value=f"Question removed with id {id}", inline=False) + await ctx.send(embed=embed) except QuestionNotFound: await ctx.send("No question found with id " + str(id)) # except: @@ -56,17 +51,25 @@ class QuizQuestions(commands.Cog): finally: quizdb.close() + @questions.command(name="show") + @commands.check(checks.isModPlus) async def show_questions(self, ctx): try: quizdb = QuizDB() questions = quizdb.get_questions() if len(questions) == 0: - await ctx.send("No questions found") + embed = discord.Embed() + embed.colour = discord.Colour.red() + embed.add_field(name="Questions", value=f"No questions found", inline=False) + + await ctx.send(embed=embed) else: - message = "" + embed = discord.Embed() + embed.set_author(name="Questions") + embed.colour = discord.Colour.orange() for q in questions: - message += f"id: {q[0]}, question: '{q[1]}', answer: '{q[2]}', reward: {q[3]}, used: {q[4]}\n" - await ctx.send(message) + embed.add_field(name=f"id: {q[0]}", value=f"Question: '{q[1]}'\nAnswer: '{q[2]}'\nReward: {q[3]}\nUsed: {q[4]}", inline=False) + await ctx.send(embed=embed) except: await ctx.send("Something went wrong") finally: @@ -105,43 +108,41 @@ class Quiz(commands.Cog): self.increment_asked_count(question[0]) channel = self.client.get_channel(constants.QuizChannelID) - answer_timer = Timer(1, 0) embed = discord.Embed() #embed.set_author(name="Quiz") embed.colour = discord.Colour.orange() embed.add_field(name="Question:", value=f"{question[1]}", inline=False) - embed.add_field(name="Reward:", value=f"${question[3]}", inline=False) + embed.add_field(name="Reward:", value=f"${question[3]} in game", inline=False) await channel.send(embed=embed) - message = await self.client.wait_for("message", check=lambda message: message.content.lower() == question[2].lower()) - embed.add_field(name="Answer:", value=f"{question[2]}", inline=False) - if (message): - self.give_reward(message.author.id, question[3]) + try: + message = await self.client.wait_for("message", check=lambda message: message.content.lower() == question[2].lower(), timeout=60*10) + self.give_reward(message.author.id, question[3]) playerdblinker = PlayerDBLinker() embed.colour = discord.Colour.green() if playerdblinker.discordidused(message.author.id): embed.add_field(name="Winner:", value=f"{message.author.mention} 🎉🎉", inline=False) - #self.embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft by using /redeem") - embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft when the server is online") + embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft by using /redeem") + #embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft when the server is online") await message.channel.send(embed=embed) else: - embed.add_field(name="Winner:", value=f"{message.author.mention} 🎉🎉", inline=False) - #self.embed.add_field(name="Claim:", value=f"1. Link your account by using /link \n2. Claim your reward in Minecraft by using /redeem") - embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft when the server is online") + embed.add_field(name="Claim:", value=f"1. Link your account by using /link \n2. Claim your reward in Minecraft by using /redeem") + #embed.add_field(name="Claim:", value=f"Claim your reward in Minecraft when the server is online") await message.channel.send(embed=embed) playerdblinker.close() - else: + except asyncio.TimeoutError: + await channel.send("Nobody found the correct answer!") embed.colour = discord.Colour.red() - embed.add_field(name="Answer:", value=f"{question[2]}", inline=False) await channel.send(embed=embed) + def increment_asked_count(self, q_id): quizdb = QuizDB() quizdb.question_asked_increment(q_id) diff --git a/data/constants.py b/data/constants.py index c9ba5d4..ae092ff 100755 --- a/data/constants.py +++ b/data/constants.py @@ -20,4 +20,5 @@ modPlusRoles = [roleAdmin, roleMod, roleOwner] # Channels ModLogs = 760807882899193867 +#QuizChannelID_dev = 774418250665951232 QuizChannelID = 774418250665951232