[Topgg] Commands, Settings and Utilities
This commit is contained in:
72
bot/modules/topgg/utils.py
Normal file
72
bot/modules/topgg/utils.py
Normal file
@@ -0,0 +1,72 @@
|
||||
from email.mime import image
|
||||
import discord
|
||||
import datetime
|
||||
from meta.client import client
|
||||
from bot.settings.setting_types import Integer
|
||||
from meta import sharding
|
||||
|
||||
from modules.reminders.reminder import Reminder
|
||||
from modules.reminders.data import reminders
|
||||
|
||||
from . import data as db
|
||||
from data.conditions import GEQ
|
||||
|
||||
topgg_upvote_link = 'https://top.gg/bot/889078613817831495/vote'
|
||||
remainder_content = "You can now Upvote me again in Top.gg. \nMy Upvote link is {}".format(topgg_upvote_link)
|
||||
|
||||
# Will return None if user has not voted in [-12.5hrs till now]
|
||||
# else will return a Tuple containing timestamp of when exactly she voted
|
||||
def get_last_voted_timestamp(userid: Integer):
|
||||
return db.topggvotes.select_one_where(
|
||||
userid=userid,
|
||||
select_columns="boostedTimestamp",
|
||||
boostedTimestamp=GEQ(datetime.datetime.utcnow() - datetime.timedelta(hours=12.5)),
|
||||
_extra="ORDER BY boostedTimestamp DESC LIMIT 1"
|
||||
)
|
||||
|
||||
# Checks if a remainder is already running (immaterial of remind_at time)
|
||||
# If no remainder exists creates a new remainder and schedules it
|
||||
def create_remainder(userid):
|
||||
if not reminders.select_one_where(
|
||||
userid=userid,
|
||||
content=remainder_content,
|
||||
_extra="ORDER BY remind_at DESC LIMIT 1"
|
||||
):
|
||||
last_vote_time = get_last_voted_timestamp(userid)
|
||||
|
||||
# if no, Create reminder
|
||||
reminder = Reminder.create(
|
||||
userid=userid,
|
||||
content=remainder_content,
|
||||
message_link=None,
|
||||
interval=None,
|
||||
#remind_at=datetime.datetime.utcnow() + datetime.timedelta(minutes=2)
|
||||
remind_at=last_vote_time[0] + datetime.timedelta(hours=12.5) if last_vote_time else datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
|
||||
)
|
||||
|
||||
# Schedule reminder
|
||||
if sharding.shard_number == 0:
|
||||
reminder.schedule()
|
||||
|
||||
|
||||
async def send_user_dm(userid):
|
||||
# Send the message, if possible
|
||||
if not (user := client.get_user(userid)):
|
||||
try:
|
||||
user = await client.fetch_user(userid)
|
||||
except discord.HTTPException:
|
||||
pass
|
||||
if user:
|
||||
try:
|
||||
embed=discord.Embed(
|
||||
title="Thankyou.",
|
||||
description='Thankyou for upvoting.',
|
||||
colour=discord.Colour.orange()
|
||||
).set_image(
|
||||
url="https://cdn.discordapp.com/attachments/908283085999706153/930559064323268618/unknown.png"
|
||||
)
|
||||
|
||||
await user.send(embed=embed)
|
||||
except discord.HTTPException:
|
||||
# Nothing we can really do here. Maybe tell the user about their reminder next time?
|
||||
pass
|
||||
Reference in New Issue
Block a user