async def loser_pm(giveaway): losers_tuple = giveaway.get_entrants() losers_list = [] for x in losers_tuple: losers_list.append(x) winners = giveaway.get_winners() winners_list = [] for x in winners: winners_list.append(x) for x in losers_list: if x in winners_list: losers_list.remove(x) for user_id in losers_list: read_write.add_entry(user_id[0]) user = await client.get_user_info(user_id[0]) line1 = "Better Luck Next Time.\n" line2 = "Yikes " + user.mention + " You didin't win giveaway " + giveaway.get_id( ) + "\n" line3 = "Since you are a winner in our book, we are awarding you an extra entry in future giveaways until you win one. Good Luck!\n" msg = line1 + line2 + line3 em = discord.Embed(colour=EM_COLOUR, description=msg) em.set_image(url=giveaway.get_image()) em.set_footer(text=EM_FOOTER) user = await client.get_user_info(user_id) try: await client.send_message(user, embed=em) except: print("User " + user.name + " Has messages from other server members disabled!") return return
async def winner_pm(giveaway): users_tuple = giveaway.get_winners() winners = [] for x in users_tuple: winners.append(x) for user_id in winners: read_write.add_entry(user_id[0]) read_write.set_multiplier_to_one(user_id[0]) try: user = await client.get_user_info(user_id[0]) except: print(user_id + "is unable to receive msges fron this bot") user = client.user line1 = "Winner winner Chicken Dinner!\n" line2 = "Congratulations " + user.mention + " You have won giveaway " + giveaway.get_id( ) + "\n" line3 = "A Community Manager will contact you shortly.\n" date = date_parser(giveaway.timeframe.end, giveaway.timeframe.endtime) date[2] = str(int(date[2]) + 7) line4 = "You will have until " + str(date[0]) + "/" + str( date[1]) + "/" + str(date[2]) + " to collect your prize.\n" msg = line1 + line2 + line3 + line4 em = discord.Embed(colour=EM_COLOUR, description=msg) image = (giveaway.get_image()) em.set_image(url=image) em.set_footer(text=EM_FOOTER) await client.send_message(user, embed=em) return
async def archive_giveaway(message): text = message.content.split(sep=" ") giveaway = retrieve_giveaway(text[1]) if giveaway == "NA": # means there was an error in the read function await client.send_message(message.channel, "Invalid giveaway id!") return giveaway.set_status("archived") store_giveaway(giveaway) msg = "giveaway " + giveaway.get_id() + " has been archived" await client.send_message(message.channel, msg)
async def set_image(message): text = message.content.split(sep=" ") giveaway = retrieve_giveaway(text[1]) if giveaway == "NA": # means there was an error in the read function await client.send_message(message.channel, "Invalid giveaway id!") return giveaway.set_image(text[3]) store_giveaway(giveaway) msg = ("Image has been updated for giveaway '" + giveaway.get_id() + "' Use ```!giveaway [id] preview``` to preview the giveaway") await client.send_message(message.channel, msg)
def giveaway_done(giveaway): giveaway.set_status("archived") giveaway.draw_winners(giveaway.get_number_of_winners()) giveaway.replace_winners = 1 store_giveaway(giveaway) reloaded = retrieve_giveaway(giveaway.get_id()) winners = () for x in reloaded.get_winners(): winners = winners + (x[0], ) donelist.append(reloaded) return
async def preview_giveaway(message, listmode=0): if listmode != 0: giveaway_id = listmode else: giveaway_id = (message.content.split(sep=" "))[1] giveaway = retrieve_giveaway(giveaway_id) if giveaway == "NA": await client.send_message(message.channel, "Invalid ID!") return winning_users = [] for x in giveaway.get_winners(): winning_users.append(x) if giveaway.get_status() == "active": liveswitch = "\** LIVE \**" else: liveswitch = "\** COMPLETE \**" line1_1 = str("**Giveaway #" + giveaway.get_id() + " |** start-" + giveaway.timeframe.start) line1_2 = str(" end-" + giveaway.timeframe.end + " --" + giveaway.get_status() + "--" + " **|\n" + giveaway.get_header() + "**\n" + liveswitch + "\n") line1 = line1_1 + line1_2 line2 = giveaway.get_description() + "\n" line3 = "**Winners(" + giveaway.get_number_of_winners() + "):**" line4 = "Number of entrants: **" + str(len(giveaway.entrants)) + "** \n" if len(winning_users) == 0: line3 = line3 + " Not Drawn \n" else: for i in winning_users: user = await client.get_user_info(i[0]) userstring = user.mention line3 = line3 + userstring + " " line3 = line3 + "**|** Congratulations!\n" msg = line2 + line4 + line3 em = discord.Embed(colour=EM_COLOUR, title=line1, description=msg) image = (giveaway.get_image()) em.set_image(url=image) em.set_footer(text=EM_FOOTER) message_to_cache = await client.send_message(message.channel, embed=em) sql = "INSERT INTO message_cache VALUES (%s,%s, %s)" values = (giveaway_id, message_to_cache.id, message_to_cache.channel.id) cursor.execute(sql, values) database.commit() # for x in client.get_all_emojis(): # print(str(x)) emoji = discord.utils.get(client.get_all_emojis(), name=ENTRY_TOKEN) # print(str(emoji)) await client.add_reaction(message_to_cache, emoji) return
async def set_winners(message): text = message.content.split(sep=" ") giveaway = retrieve_giveaway(text[1]) if giveaway == "NA" or len( text) < 4: # means there was an error in the read function await client.send_message( message.channel, "Invalid giveaway id, or not enough parameters passed!!") return giveaway.set_number_of_winners(text[3]) store_giveaway(giveaway) msg = ("There are now " + giveaway.get_number_of_winners() + " winners for giveway '" + giveaway.get_id() + "'") await client.send_message(message.channel, msg)
async def set_description(message): text = message.content.split(sep=" ") giveaway = retrieve_giveaway(text[1]) if giveaway == "NA": # means there was an error in the read function await client.send_message(message.channel, "Invalid giveaway id!") return description = "" for x in range(3, len(text)): description = description + text[x] + " " giveaway.set_description(description) store_giveaway(giveaway) msg = ("The new description for giveaway '" + giveaway.get_id() + "' is '" + giveaway.get_description() + "'") await client.send_message(message.channel, msg)
async def set_date(message): content = message.content.split(sep=" ") giveaway = retrieve_giveaway(content[1]) if giveaway == "NA": await client.send_message(message.channel, "Invalid ID!") return # should be yyyy/mm/dd hh:mm try: giveaway.timeframe.end = str(content[3]) giveaway.timeframe.endtime = str(content[4]) except: await client.send_message( message.channel, "Invalid formatting! Should be yyyy/mm/dd hh:mm") return date = giveaway.timeframe.end.split(sep="/") year = date[0] month = date[1] day = date[2] time = giveaway.timeframe.endtime.split(sep=":") hour = time[0] minute = time[1] if (giveaway.status == "archived"): await client.send_message(message.channel, "This giveaway has already been completed!") return # print(year +" " + month + " " + day + " " + hour + " " +minute) timer = start_timer( [int(year), int(month), int(day), int(hour), int(minute), 0]) if (type(timer) == str): await client.send_message( message.channel, "Invalid Time! Should be yyyy/mm/dd hh:mm and not located in the past" ) return timer.start() store_giveaway(giveaway) await client.send_message( message.channel, "Giveaway **#" + giveaway.get_id() + "** will end on " + giveaway.timeframe.end + " at " + giveaway.timeframe.endtime) return
async def enter_pm(user_id, giveaway): line1 = "You have been entered for giveaway " + giveaway.get_id() + "\n" line2 = "Description: " + giveaway.get_description() + "\n" line3 = "End date: " + giveaway.timeframe.end + "\n" line4 = "If you win, you will be notified by the bot and a TC staff member. Good luck! \n" msg = line1 + line2 + line3 + line4 em = discord.Embed(colour=EM_COLOUR, title=msg) em.set_image(url=giveaway.get_image()) em.set_footer(text=EM_FOOTER) user = await client.get_user_info(user_id) try: await client.send_message(user, embed=em) except: print("User " + user.name + " Has messages from other server members disabled!") return
async def redraw_winners(message): text = message.content.split(sep=" ") giveaway = retrieve_giveaway(text[1]) if giveaway == "NA": client.send_message(message.channel, "Invalid ID") return if giveaway.get_status() != "archived": await client.send_message( message.channel, "This giveaway is not complete! Unable to redraw!") return giveaway.draw_winners(giveaway.get_number_of_winners()) giveaway.replace_winners = 1 store_giveaway(giveaway) msg = "Winners have been picked randomly for giveaway '" + giveaway.get_id( ) + "'" await client.send_message(message.channel, msg) return
async def update_giveaways(): sql = "SELECT * FROM message_cache " cursor.execute(sql) messages = cursor.fetchall() message_list = [] for i in range(len(messages)): message_list.append(messages[i]) for x in message_list: giveaway_id = x[0] try: message = await client.get_message(client.get_channel(x[2]), x[1]) except: donothing = 1 giveaway = retrieve_giveaway(giveaway_id) if giveaway == "NA": return winning_users = [] for x in giveaway.get_winners(): winning_users.append(x) if giveaway.get_status() == "active": liveswitch = "\** LIVE \**" else: liveswitch = "\** COMPLETE \**" line1_1 = str("**Giveaway #" + giveaway.get_id() + " |** start-" + giveaway.timeframe.start) line1_2 = str(" end-" + giveaway.timeframe.end + " --" + giveaway.get_status() + "--" + " **\n" + giveaway.get_header() + "**\n" + liveswitch + "\n") line1 = line1_1 + line1_2 line2 = giveaway.get_description() + "\n" line3 = "**Winners(" + giveaway.get_number_of_winners() + "):**" line4 = "Number of entrants: **" + str(len( giveaway.entrants)) + "** \n" if len(winning_users) == 0 and giveaway.timeframe.end != "3000/01/01": current_date = datetime.datetime.utcnow() end_time_array = date_parser(giveaway.timeframe.end, giveaway.timeframe.endtime) end_time = datetime.datetime(end_time_array[0], end_time_array[1], end_time_array[2], end_time_array[3], end_time_array[4], 0) difference = (end_time - current_date) line3 = "Time till drawing: " + str( difference.days) + " days " + str( int(difference.seconds / (60 * 60))) + " hours " + str( int((difference.seconds / (60)) % 60)) + " minutes" elif giveaway.status == "archived": for i in winning_users: user = await client.get_user_info(i[0]) userstring = user.mention line3 = line3 + userstring + " " line3 = line3 + "**|** Congratulations!\n" msg = line2 + line4 + line3 em = discord.Embed(colour=EM_COLOUR, title=line1, description=msg) image = (giveaway.get_image()) em.set_image(url=image) em.set_footer(text=EM_FOOTER) try: await client.edit_message(message, new_content=None, embed=em) except: donothing = 1 # yeah sorry this hurts me too database.commit() return