From e7931b20a16ea060027d681c21797b2648a6ccfb Mon Sep 17 00:00:00 2001 From: victormylle Date: Sat, 14 Nov 2020 13:32:31 +0100 Subject: [PATCH 01/11] Changed quiz interval --- cogs/quiz.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index 3a11e53..cdff2d3 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -78,19 +78,28 @@ 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 = (5*60, 20*60) self.auto = False self.timeout = 60*10 - @commands.command(name="quiz") + + @commands.group(name="questions",case_insensitive=True, invoke_without_command=True) @commands.check(checks.isModPlus) async def quiz_bot(self, ctx, f, *args): - if (f == "auto" and not self.auto): - self.auto = True - asyncio.create_task(self.start_auto_quiz()) - elif (f == "stop" and self.auto): - self.auto = False + pass + + @quiz.command(name="auto") + @commands.check(checks.isModPlus) + async def auto_quiz(self, ctx): + self.auto = True + asyncio.create_task(self.start_auto_quiz()) + + @quiz.command(name="stop") + @commands.check(checks.isModPlus) + async def auto_quiz(self, ctx): + self.auto = False + async def start_auto_quiz(self): while self.auto: From 75802142e8c51e54514aca4fe0fb5d791d281a9e Mon Sep 17 00:00:00 2001 From: victormylle Date: Sat, 14 Nov 2020 13:38:36 +0100 Subject: [PATCH 02/11] Changed quiz interval --- cogs/quiz.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index cdff2d3..68bb6a7 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -84,9 +84,9 @@ class Quiz(commands.Cog): self.timeout = 60*10 - @commands.group(name="questions",case_insensitive=True, invoke_without_command=True) + @commands.group(name="quiz",case_insensitive=True, invoke_without_command=True) @commands.check(checks.isModPlus) - async def quiz_bot(self, ctx, f, *args): + async def quiz(self, ctx, f, *args): pass @quiz.command(name="auto") From e23ddf049bced47e888eb29622ab0ebfbdfd520b Mon Sep 17 00:00:00 2001 From: victormylle Date: Sat, 14 Nov 2020 15:09:14 +0100 Subject: [PATCH 03/11] Created quiz leaderboard --- cogs/leaderboards.py | 47 ++++++++++++++++++++++++++++---------- data/DatabaseConnection.py | 7 +++++- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/cogs/leaderboards.py b/cogs/leaderboards.py index 5d1f23a..9e4cf67 100644 --- a/cogs/leaderboards.py +++ b/cogs/leaderboards.py @@ -11,7 +11,7 @@ class Leaderboards(commands.Cog): async def top(self, ctx, *args): pass - def create_leaderboard_embed(self, title, column, time=False): + async def create_leaderboard_embed(self, title, column, time=False): def seconds_to_time(s): t = timedelta(seconds=s) @@ -27,9 +27,19 @@ class Leaderboards(commands.Cog): res += f"{d.second}s".zfill(3) return res - playerdb = PlayerDBLinker() - top_players = playerdb.get_stats(column) - playerdb.close() + if column == "quizWins": + top_players = [] + quizplayersdb = QuizPlayersDB() + for player in quizplayersdb.get_top_players(): + discorduser = {} + discorduser["playerName"] = (await self.client.fetch_user(player["discordid"])).name + discorduser["stat"] = player["stat"] + top_players.append(discorduser) + quizplayersdb.close() + else: + playerdb = PlayerDBLinker() + top_players = playerdb.get_stats(column) + playerdb.close() embed = discord.Embed() embed.colour = discord.Colour.orange() embed.set_author(name="Top") @@ -50,35 +60,48 @@ class Leaderboards(commands.Cog): @top.command(name="broken", case_insensitive=True) async def top_broken(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Broken blocks", "brokenBlocks")) + embed = await self.create_leaderboard_embed("Broken blocks", "brokenBlocks") + await ctx.send(embed=embed) @top.command(name="kills", case_insensitive=True) async def top_kills(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Kills", "pvpKills")) + embed = await self.create_leaderboard_embed("Kills", "pvpKills") + await ctx.send(embed=embed) @top.command(name="deaths", case_insensitive=True) async def top_deaths(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Deaths", "pvpDeaths")) + embed = await self.create_leaderboard_embed("Deaths", "pvpDeaths") + await ctx.send(embed=embed) @top.command(name="level", case_insensitive=True) async def top_level(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Level", "playerLevel")) + embed = await self.create_leaderboard_embed("Level", "playerLevel") + await ctx.send(embed=embed) @top.command(name="placed", case_insensitive=True) async def top_placed(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Placed blocks", "placedBlocks")) + embed = await self.create_leaderboard_embed("Placed blocks", "placedBlocks") + await ctx.send(embed=embed) @top.command(name="playedtime", aliases=["onlinetime"], case_insensitive=True) async def top_playedtime(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Played time", "onlineTime", time=True)) + embed = await self.create_leaderboard_embed("Played time", "onlineTime", time=True) + await ctx.send(embed=embed) @top.command(name="sailed", case_insensitive=True) async def top_sailed(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Sailed", "waterTravelledBlocks")) + embed = await self.create_leaderboard_embed("Sailed", "waterTravelledBlocks") + await ctx.send(embed=embed) @top.command(name="walked", case_insensitive=True) async def top_walked(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Walked", "travelledBlocks")) + embed = await self.create_leaderboard_embed("Walked", "travelledBlocks") + await ctx.send(embed=embed) + + @top.command(name="quiz", case_insensitive=True) + async def top_quiz(self, ctx): + embed = await self.create_leaderboard_embed("Quiz wins", "quizWins") + await ctx.send(embed=embed) def setup(client): diff --git a/data/DatabaseConnection.py b/data/DatabaseConnection.py index 5ee8efd..ba65cd3 100755 --- a/data/DatabaseConnection.py +++ b/data/DatabaseConnection.py @@ -77,6 +77,12 @@ class QuizPlayersDB: cursor.execute(sql) self.discorddbconn.get_db().commit() + def get_top_players(self, limit = 20): + cursor = self.discorddbconn.get_cursor(dictionary=True) + sql = f"SELECT discordid, wins as stat FROM {self.tablename} ORDER BY wins DESC LIMIT {str(limit)}" + cursor.execute(sql) + return list(cursor.fetchall()) + def close(self): self.discorddbconn.close() @@ -209,7 +215,6 @@ class PlayerDBLinker: serverdb_cursor.execute(sql) return list(serverdb_cursor.fetchall()) - def close(self): self.discorddbconn.close() self.serverdbconn.close() From 1d4acc40e043dd11c250e321be7377967f8337de Mon Sep 17 00:00:00 2001 From: victormylle Date: Sat, 14 Nov 2020 23:53:59 +0100 Subject: [PATCH 04/11] Added wordgame --- cogs/quiz.py | 132 ++++++++++++++++++++++++++++++++++++- data/DatabaseConnection.py | 63 ++++++++++++++++++ data/constants.py | 2 +- 3 files changed, 193 insertions(+), 4 deletions(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index 68bb6a7..8df60be 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -75,11 +75,76 @@ class QuizQuestions(commands.Cog): finally: quizdb.close() + + + @commands.group(name="wordgame",case_insensitive=True, invoke_without_command=True) + @commands.check(checks.isModPlus) + # /q&a add "What is ...." "Australia" + async def wordgame(self, ctx, *args): + pass + + @wordgame.command(name="add") + @commands.check(checks.isModPlus) + async def add_word(self, ctx, w, reward=50): + try: + wordgamedb = WordGameDB() + w_id = wordgamedb.add_word(w, reward) + embed = discord.Embed() + embed.colour = discord.Colour.green() + embed.add_field(name="Success", value=f"Added word with {w_id}", inline=False) + await ctx.send(embed=embed) + except: + await ctx.send("Something went wrong") + finally: + wordgamedb.close() + + + @wordgame.command(name="rm") + @commands.check(checks.isModPlus) + async def rm_word(self, ctx, id): + try: + wordgamedb = WordGameDB() + wordgamedb.rm_word(id) + 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: + await ctx.send("Something went wrong") + finally: + wordgamedb.close() + + @wordgame.command(name="show") + @commands.check(checks.isModPlus) + async def show_words(self, ctx): + try: + wordgamedb = WordGameDB() + words = wordgamedb.get_words() + if len(words) == 0: + embed = discord.Embed() + embed.colour = discord.Colour.red() + embed.add_field(name="Words", value=f"No words found", inline=False) + + await ctx.send(embed=embed) + else: + embed = discord.Embed() + embed.set_author(name="Words") + embed.colour = discord.Colour.orange() + for w in words: + embed.add_field(name=f"id: {w['id']}", value=f"Word: '{w['word']}'\nReward: {w['reward']}\nUsed: {w['asked']}", inline=False) + await ctx.send(embed=embed) + except: + await ctx.send("Something went wrong") + finally: + wordgamedb.close() + class Quiz(commands.Cog): def __init__(self, client): self.client = client - #self.interval = (5, 10) - self.interval = (5*60, 20*60) + self.interval = (5, 10) + #self.interval = (5*60, 20*60) self.auto = False self.timeout = 60*10 @@ -104,7 +169,10 @@ class Quiz(commands.Cog): async def start_auto_quiz(self): while self.auto: await asyncio.sleep(random.randint(self.interval[0], self.interval[1])) - await self.ask_question() + if random.random() < 0.4: + await self.start_word_game() + else: + await self.ask_question() @commands.Cog.listener() async def on_ready(self): @@ -157,7 +225,54 @@ class Quiz(commands.Cog): embed.colour = discord.Colour.red() await channel.send(embed=embed) + async def start_word_game(self): + word = self.get_random_word() + self.increment_asked_word(int(word["id"])) + channel = self.client.get_channel(constants.QuizChannelID) + embed = discord.Embed() + #embed.set_author(name="Quiz") + embed.colour = discord.Colour.orange() + + shaken_word = self.shake_word(word["word"].lower()) + embed.add_field(name="Question:", value=f"Find the word from: {shaken_word}", inline=False) + embed.add_field(name="Reward:", value=f"${word['reward']} in game", inline=False) + embed.add_field(name="End:", value=f"The game will end in 10 minutes!", inline=False) + await channel.send(embed=embed) + + embed = discord.Embed() + embed.colour = discord.Colour.orange() + + embed.add_field(name="Question:", value=f"{shaken_word}", inline=False) + embed.add_field(name="Reward:", value=f"${word['reward']} in game", inline=False) + embed.add_field(name="Answer:", value=f"{word['word']}", inline=False) + + try: + message = await self.client.wait_for("message", check=lambda message: message.content.lower() == word['word'].lower(), timeout=self.timeout) + + self.give_reward(message.author.id, word["id"]) + 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) + 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) + 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() + except asyncio.TimeoutError: + await channel.send("Nobody found the correct answer!") + embed.colour = discord.Colour.red() + await channel.send(embed=embed) + + def shake_word(self, word): + word_list = list(word) + random.shuffle(word_list) + return "".join(word_list) def increment_asked_count(self, q_id): quizdb = QuizDB() @@ -170,6 +285,17 @@ class Quiz(commands.Cog): quizdb.close() return q + def get_random_word(self): + wordgamedb = WordGameDB() + w = wordgamedb.get_random_word() + wordgamedb.close() + return w + + def increment_asked_word(self, w_id): + wordgamedb = WordGameDB() + wordgamedb.word_asked_increment(w_id) + wordgamedb.close() + def give_reward(self, discordid, reward): quiz_players_db = QuizPlayersDB() quiz_players_db.player_won(discordid, reward) diff --git a/data/DatabaseConnection.py b/data/DatabaseConnection.py index ba65cd3..7195ff5 100755 --- a/data/DatabaseConnection.py +++ b/data/DatabaseConnection.py @@ -10,6 +10,8 @@ class PlayerNotLinked(Exception): pass class QuestionNotFound(Exception): pass +class WordNotFound(Exception): + pass class PlayerNotFound(Exception): pass @@ -86,6 +88,67 @@ class QuizPlayersDB: def close(self): self.discorddbconn.close() +class WordGameDB: + def __init__(self): + self.tablename = "wordGame" + self.discorddbconn = DatabaseConnection(database="worldcraft_discord") + cursor = self.discorddbconn.get_cursor() + cursor.execute("create table IF NOT EXISTS {} (id int NOT NULL PRIMARY KEY AUTO_INCREMENT, word text NOT NULL, reward int NOT NULL, asked int DEFAULT 0)".format(self.tablename)) + + def add_word(self, word, reward): + cursor = self.discorddbconn.get_cursor() + sql = f"insert into {self.tablename} (word, reward) VALUES ('{word}', {str(reward)})" + try: + cursor.execute(sql) + self.discorddbconn.get_db().commit() + return cursor.lastrowid + except: + raise SQLInsertError() + + def rm_word(self, id): + cursor = self.discorddbconn.get_cursor() + cursor.execute("select count(*) from {} where id={}".format(self.tablename, str(id))) + res = cursor.fetchone() + if res[0] == 1: + sql = f"DELETE FROM {self.tablename} WHERE id = {str(id)}" + cursor.execute(sql) + self.discorddbconn.get_db().commit() + else: + raise QuestionNotFound() + + def get_words(self): + # word, used, reward + cursor = self.discorddbconn.get_cursor(dictionary=True) + sql = f"SELECT * FROM {self.tablename}" + cursor.execute(sql) + return list(cursor.fetchall()) + + def word_asked_increment(self, w_id): + cursor = self.discorddbconn.get_cursor() + sql = f"UPDATE {self.tablename} SET asked = asked + 1 WHERE id = {str(w_id)}" + cursor.execute(sql) + self.discorddbconn.get_db().commit() + + def count_words(self): + cursor = self.discorddbconn.get_cursor() + cursor.execute("select count(*) from {}".format(self.tablename)) + res = cursor.fetchone() + return res[0] + + def get_random_word(self): + if self.count_words() != 0: + cursor = self.discorddbconn.get_cursor(dictionary=True) + sql = f"SELECT * FROM {self.tablename} ORDER BY RAND() LIMIT 1" + cursor.execute(sql) + return cursor.fetchone() + else: + raise WordNotFound() + + def close(self): + self.discorddbconn.close() + + + class QuizDB: def __init__(self): self.tablename = "questions" diff --git a/data/constants.py b/data/constants.py index 8ba0de0..852da09 100755 --- a/data/constants.py +++ b/data/constants.py @@ -22,4 +22,4 @@ modPlusRoles = [roleAdmin, roleMod, roleOwner] ModLogs = 760807882899193867 #QuizChannelID_dev = 774418250665951232 QuizChannelID = 775776550871498752 -DiscordLinkerID = 776944220119760927 +DiscordLinkerID = 776944220119760927 From d101e2a00b2975a8a771c45fc6b72333e7af0b2c Mon Sep 17 00:00:00 2001 From: victormylle Date: Sat, 14 Nov 2020 23:56:10 +0100 Subject: [PATCH 05/11] Changed interval --- cogs/quiz.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index 8df60be..e364279 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -143,8 +143,8 @@ class QuizQuestions(commands.Cog): class Quiz(commands.Cog): def __init__(self, client): self.client = client - self.interval = (5, 10) - #self.interval = (5*60, 20*60) + #self.interval = (5, 10) + self.interval = (5*60, 20*60) self.auto = False self.timeout = 60*10 From 519b629a2d51c2329c465d7bb6985ee85748cbc6 Mon Sep 17 00:00:00 2001 From: victormylle Date: Sun, 15 Nov 2020 01:38:32 +0100 Subject: [PATCH 06/11] Fixed small issue --- cogs/quiz.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index e364279..b880960 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -250,7 +250,7 @@ class Quiz(commands.Cog): try: message = await self.client.wait_for("message", check=lambda message: message.content.lower() == word['word'].lower(), timeout=self.timeout) - self.give_reward(message.author.id, word["id"]) + self.give_reward(message.author.id, word["reward"]) playerdblinker = PlayerDBLinker() embed.colour = discord.Colour.green() if playerdblinker.discordidused(message.author.id): From e49c3e0d6ccfcc1f14186b19acda18a3f7d7d93a Mon Sep 17 00:00:00 2001 From: victormylle Date: Sun, 15 Nov 2020 10:33:42 +0100 Subject: [PATCH 07/11] Fixed emoji issue --- cogs/playerlink.py | 16 +++++++++++++--- cogs/quiz.py | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/cogs/playerlink.py b/cogs/playerlink.py index 9d29839..0a094d5 100755 --- a/cogs/playerlink.py +++ b/cogs/playerlink.py @@ -7,6 +7,7 @@ import asyncio import threading from functions.timer import Timer from data import constants +import re from data.DatabaseConnection import * # 25216 --> uuid server @@ -36,13 +37,22 @@ def get_player_uuid(minecraftname): raise PlayerError() return data_string +def deEmojify(text): + regrex_pattern = re.compile(pattern = "[" + u"\U0001F600-\U0001F64F" # emoticons + u"\U0001F300-\U0001F5FF" # symbols & pictographs + u"\U0001F680-\U0001F6FF" # transport & map symbols + u"\U0001F1E0-\U0001F1FF" # flags (iOS) + "]+", flags = re.UNICODE) + return regrex_pattern.sub(r'',text) + def send_chat(discordname, minecraftname, code): HOST = '192.168.1.214' # The server's hostname or IP address PORT = 25224 # The port used by the server with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) - s.send(bytes("{}\t{}\t{}\n".format(discordname, minecraftname, code), encoding="ascii")) + s.send(bytes("{}\t{}\t{}\n".format(deEmojify(discordname), minecraftname, code), encoding="ascii")) data = s.recv(1024) data_string = data.decode("utf-8").strip('\n') if data_string == "PlayerError": @@ -149,8 +159,8 @@ class PlayerLink(commands.Cog): except PlayerError: await ctx.send("Player '" + arg + "' not found") - except: - await ctx.send("Something went wrong") + # except: + # await ctx.send("Something went wrong") @commands.command(name="Unlink") async def unlink(self, ctx): diff --git a/cogs/quiz.py b/cogs/quiz.py index b880960..9e13f6a 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -245,7 +245,7 @@ class Quiz(commands.Cog): embed.add_field(name="Question:", value=f"{shaken_word}", inline=False) embed.add_field(name="Reward:", value=f"${word['reward']} in game", inline=False) - embed.add_field(name="Answer:", value=f"{word['word']}", inline=False) + embed.add_field(name="Answer:", value=f"{word['word']}", inline=Falvse) try: message = await self.client.wait_for("message", check=lambda message: message.content.lower() == word['word'].lower(), timeout=self.timeout) From 71640b3ec936e95665ef5fc700bc26e6019a5c08 Mon Sep 17 00:00:00 2001 From: victormylle Date: Sun, 15 Nov 2020 10:34:45 +0100 Subject: [PATCH 08/11] Fixed typfout issue --- cogs/quiz.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index 9e13f6a..b880960 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -245,7 +245,7 @@ class Quiz(commands.Cog): embed.add_field(name="Question:", value=f"{shaken_word}", inline=False) embed.add_field(name="Reward:", value=f"${word['reward']} in game", inline=False) - embed.add_field(name="Answer:", value=f"{word['word']}", inline=Falvse) + embed.add_field(name="Answer:", value=f"{word['word']}", inline=False) try: message = await self.client.wait_for("message", check=lambda message: message.content.lower() == word['word'].lower(), timeout=self.timeout) From fc5d0f7efee6abc0c53a42de11d4c4dbe1dd2f8a Mon Sep 17 00:00:00 2001 From: victormylle Date: Mon, 16 Nov 2020 12:04:53 +0100 Subject: [PATCH 09/11] Created guess number game --- cogs/quiz.py | 117 ++++++++++++++++++++++------------------------ data/constants.py | 3 +- 2 files changed, 58 insertions(+), 62 deletions(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index b880960..fa6886c 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -169,7 +169,10 @@ class Quiz(commands.Cog): async def start_auto_quiz(self): while self.auto: await asyncio.sleep(random.randint(self.interval[0], self.interval[1])) - if random.random() < 0.4: + perc = random.random() + if perc < 0.5: + await self.guess_the_number() + elif perc < 0.8: await self.start_word_game() else: await self.ask_question() @@ -179,95 +182,87 @@ class Quiz(commands.Cog): self.auto = True asyncio.create_task(self.start_auto_quiz()) - async def ask_question(self): - - question = self.get_random_question() - - self.increment_asked_count(question[0]) - - channel = self.client.get_channel(constants.QuizChannelID) - + def create_question_embed(self, question, reward): 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]} in game", inline=False) + embed.add_field(name="Question:", value=f"{question}", inline=False) + embed.add_field(name="Reward:", value=f"${reward} in game", inline=False) embed.add_field(name="End:", value=f"The quiz will end in 10 minutes!", inline=False) - await channel.send(embed=embed) + return embed + def create_answer_embed(self, question, answer, reward, author=None, linked=False, correct=False): embed = discord.Embed() 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]} in game", inline=False) - embed.add_field(name="Answer:", value=f"{question[2]}", inline=False) + embed.add_field(name="Question:", value=f"{question}", inline=False) + embed.add_field(name="Reward:", value=f"${reward} in game", inline=False) + embed.add_field(name="Answer:", value=f"{answer}", inline=False) - try: - message = await self.client.wait_for("message", check=lambda message: message.content.lower() == question[2].lower(), timeout=self.timeout) - - self.give_reward(message.author.id, question[3]) - playerdblinker = PlayerDBLinker() + if correct: embed.colour = discord.Colour.green() - if playerdblinker.discordidused(message.author.id): - embed.add_field(name="Winner:", value=f"{message.author.mention} 🎉🎉", inline=False) + if linked: + embed.add_field(name="Winner:", value=f"{author.mention} 🎉🎉", inline=False) 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) + embed.add_field(name="Winner:", value=f"{author.mention} 🎉🎉", inline=False) 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) + else: + embed.colour = discord.Colour.red() + return embed + + async def guess_the_number(self): + ranges = {10: 50, 25: 75, 50: 100, 75: 125, 100: 150} + range = random.choice(list(ranges)) + random_number = random.randint(1, range) + channel = self.client.get_channel(constants.QuizChannelID) + await channel.send(embed=self.create_question_embed(f"Guess the number from 1 to {range}", ranges[range])) + await channel.edit(slowmode_delay=1) + try: + message = await self.client.wait_for("message", check=lambda message: message.content.isdigit() and int(message.content) == random_number, timeout=self.timeout) + self.give_reward(message.author.id, ranges[range]) + playerdblinker = PlayerDBLinker() + linked = playerdblinker.discordidused(message.author.id) + await message.channel.send(embed=self.create_answer_embed(f"Guess the number from 1 to {range}", str(random_number), ranges[range], message.author, linked, True)) playerdblinker.close() except asyncio.TimeoutError: await channel.send("Nobody found the correct answer!") - embed.colour = discord.Colour.red() - await channel.send(embed=embed) + await message.channel.send(embed=self.create_answer_embed(f"Guess the number from 1 to {range}", str(random_number), ranges[range])) + await channel.edit(slowmode_delay=10) + + async def ask_question(self): + question = self.get_random_question() + self.increment_asked_count(question[0]) + channel = self.client.get_channel(constants.QuizChannelID) + await channel.send(embed=self.create_question_embed(question[1], question[3])) + try: + message = await self.client.wait_for("message", check=lambda message: message.content.lower() == question[2].lower(), timeout=self.timeout) + self.give_reward(message.author.id, question[3]) + playerdblinker = PlayerDBLinker() + linked = playerdblinker.discordidused(message.author.id) + await message.channel.send(embed=self.create_answer_embed(question[1], question[2], question[3], message.author, linked, True)) + playerdblinker.close() + except asyncio.TimeoutError: + await channel.send("Nobody found the correct answer!") + await message.channel.send(embed=self.create_answer_embed(question[1], question[2], question[3])) async def start_word_game(self): word = self.get_random_word() self.increment_asked_word(int(word["id"])) channel = self.client.get_channel(constants.QuizChannelID) - - embed = discord.Embed() - #embed.set_author(name="Quiz") - embed.colour = discord.Colour.orange() - shaken_word = self.shake_word(word["word"].lower()) - embed.add_field(name="Question:", value=f"Find the word from: {shaken_word}", inline=False) - embed.add_field(name="Reward:", value=f"${word['reward']} in game", inline=False) - embed.add_field(name="End:", value=f"The game will end in 10 minutes!", inline=False) - await channel.send(embed=embed) - - embed = discord.Embed() - embed.colour = discord.Colour.orange() - - embed.add_field(name="Question:", value=f"{shaken_word}", inline=False) - embed.add_field(name="Reward:", value=f"${word['reward']} in game", inline=False) - embed.add_field(name="Answer:", value=f"{word['word']}", inline=False) - + await channel.send(embed=self.create_question_embed(f"Find the word from: {shaken_word}", word['reward'])) try: message = await self.client.wait_for("message", check=lambda message: message.content.lower() == word['word'].lower(), timeout=self.timeout) - self.give_reward(message.author.id, word["reward"]) 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) - 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) - 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) + linked = playerdblinker.discordidused(message.author.id) + await message.channel.send(embed=self.create_answer_embed(f"Find the word from: {shaken_word}", word["word"], word["reward"], message.author, linked, True)) playerdblinker.close() except asyncio.TimeoutError: await channel.send("Nobody found the correct answer!") - embed.colour = discord.Colour.red() - await channel.send(embed=embed) + await message.channel.send(embed=self.create_answer_embed(f"Find the word from: {shaken_word}", word["word"], word["reward"])) + def shake_word(self, word): word_list = list(word) diff --git a/data/constants.py b/data/constants.py index 852da09..b9ea54f 100755 --- a/data/constants.py +++ b/data/constants.py @@ -20,6 +20,7 @@ modPlusRoles = [roleAdmin, roleMod, roleOwner] # Channels ModLogs = 760807882899193867 -#QuizChannelID_dev = 774418250665951232 +# dev +#QuizChannelID = 774418250665951232 QuizChannelID = 775776550871498752 DiscordLinkerID = 776944220119760927 From 557d253fda1b54851eaf74f4b561951b53a187ca Mon Sep 17 00:00:00 2001 From: victormylle Date: Tue, 17 Nov 2020 00:20:05 +0100 Subject: [PATCH 10/11] Changed database ip --- cogs/leaderboards.py | 3 ++- cogs/playerlink.py | 10 +--------- data/DatabaseConnection.py | 5 +++-- functions/emoji_check.py | 10 ++++++++++ 4 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 functions/emoji_check.py diff --git a/cogs/leaderboards.py b/cogs/leaderboards.py index 9e4cf67..53b33b8 100644 --- a/cogs/leaderboards.py +++ b/cogs/leaderboards.py @@ -2,6 +2,7 @@ import discord from discord.ext import commands from data.DatabaseConnection import * from datetime import datetime, timedelta +from functions.emoji_check import * class Leaderboards(commands.Cog): def __init__(self, client): @@ -32,7 +33,7 @@ class Leaderboards(commands.Cog): quizplayersdb = QuizPlayersDB() for player in quizplayersdb.get_top_players(): discorduser = {} - discorduser["playerName"] = (await self.client.fetch_user(player["discordid"])).name + discorduser["playerName"] = deEmojify((await self.client.fetch_user(player["discordid"])).name).strip() discorduser["stat"] = player["stat"] top_players.append(discorduser) quizplayersdb.close() diff --git a/cogs/playerlink.py b/cogs/playerlink.py index 0a094d5..27e5e67 100755 --- a/cogs/playerlink.py +++ b/cogs/playerlink.py @@ -7,6 +7,7 @@ import asyncio import threading from functions.timer import Timer from data import constants +from functions.emoji_check import * import re from data.DatabaseConnection import * @@ -37,15 +38,6 @@ def get_player_uuid(minecraftname): raise PlayerError() return data_string -def deEmojify(text): - regrex_pattern = re.compile(pattern = "[" - u"\U0001F600-\U0001F64F" # emoticons - u"\U0001F300-\U0001F5FF" # symbols & pictographs - u"\U0001F680-\U0001F6FF" # transport & map symbols - u"\U0001F1E0-\U0001F1FF" # flags (iOS) - "]+", flags = re.UNICODE) - return regrex_pattern.sub(r'',text) - def send_chat(discordname, minecraftname, code): HOST = '192.168.1.214' # The server's hostname or IP address PORT = 25224 # The port used by the server diff --git a/data/DatabaseConnection.py b/data/DatabaseConnection.py index 7195ff5..1f9e20a 100755 --- a/data/DatabaseConnection.py +++ b/data/DatabaseConnection.py @@ -28,8 +28,9 @@ class DatabaseConnection: elif database == "s13_worldcraft": self.mydb = mysql.connector.connect( host="192.168.1.251", - user="u13_f2zpWZpIKY", - password="@fZQ6Uu3+U^WH1i2JNemgTC7", + user="worldcraft", + port="3308", + password="uJpa9VOW2P0bh0p1", database=database ) elif database == "s13_ecobridge": diff --git a/functions/emoji_check.py b/functions/emoji_check.py new file mode 100644 index 0000000..e3a30e2 --- /dev/null +++ b/functions/emoji_check.py @@ -0,0 +1,10 @@ +import re + +def deEmojify(text): + regrex_pattern = re.compile(pattern = "[" + u"\U0001F600-\U0001F64F" # emoticons + u"\U0001F300-\U0001F5FF" # symbols & pictographs + u"\U0001F680-\U0001F6FF" # transport & map symbols + u"\U0001F1E0-\U0001F1FF" # flags (iOS) + "]+", flags = re.UNICODE) + return regrex_pattern.sub(r'',text) From 6d090958096da47783fbcaf58c9905009ac035e5 Mon Sep 17 00:00:00 2001 From: victormylle Date: Tue, 17 Nov 2020 01:17:28 +0100 Subject: [PATCH 11/11] fixed quiz issue --- cogs/quiz.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cogs/quiz.py b/cogs/quiz.py index fa6886c..5d8318c 100644 --- a/cogs/quiz.py +++ b/cogs/quiz.py @@ -146,7 +146,7 @@ class Quiz(commands.Cog): #self.interval = (5, 10) self.interval = (5*60, 20*60) self.auto = False - self.timeout = 60*10 + self.timeout = 10*60 @commands.group(name="quiz",case_insensitive=True, invoke_without_command=True) @@ -193,7 +193,6 @@ class Quiz(commands.Cog): def create_answer_embed(self, question, answer, reward, author=None, linked=False, correct=False): embed = discord.Embed() - embed.colour = discord.Colour.orange() embed.add_field(name="Question:", value=f"{question}", inline=False) embed.add_field(name="Reward:", value=f"${reward} in game", inline=False) @@ -227,7 +226,7 @@ class Quiz(commands.Cog): playerdblinker.close() except asyncio.TimeoutError: await channel.send("Nobody found the correct answer!") - await message.channel.send(embed=self.create_answer_embed(f"Guess the number from 1 to {range}", str(random_number), ranges[range])) + await channel.send(embed=self.create_answer_embed(f"Guess the number from 1 to {range}", str(random_number), ranges[range])) await channel.edit(slowmode_delay=10) async def ask_question(self): @@ -244,7 +243,7 @@ class Quiz(commands.Cog): playerdblinker.close() except asyncio.TimeoutError: await channel.send("Nobody found the correct answer!") - await message.channel.send(embed=self.create_answer_embed(question[1], question[2], question[3])) + await channel.send(embed=self.create_answer_embed(question[1], question[2], question[3])) async def start_word_game(self): word = self.get_random_word() @@ -261,7 +260,7 @@ class Quiz(commands.Cog): playerdblinker.close() except asyncio.TimeoutError: await channel.send("Nobody found the correct answer!") - await message.channel.send(embed=self.create_answer_embed(f"Find the word from: {shaken_word}", word["word"], word["reward"])) + await channel.send(embed=self.create_answer_embed(f"Find the word from: {shaken_word}", word["word"], word["reward"])) def shake_word(self, word):