From 724a39a940a6760311b8b513497ff9424f110fd1 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Tue, 18 Jan 2022 00:14:18 +0530 Subject: [PATCH] [Topgg] Finalize module framework --- bot/modules/topgg/__init__.py | 5 +- bot/modules/topgg/module.py | 45 +++++++++ bot/modules/topgg/topgg.py | 171 ---------------------------------- 3 files changed, 49 insertions(+), 172 deletions(-) delete mode 100644 bot/modules/topgg/topgg.py diff --git a/bot/modules/topgg/__init__.py b/bot/modules/topgg/__init__.py index d9785b83..bf762868 100644 --- a/bot/modules/topgg/__init__.py +++ b/bot/modules/topgg/__init__.py @@ -1,3 +1,6 @@ from .module import module -from . import topgg +from . import webhook +from . import commands +from . import data +from . import settings \ No newline at end of file diff --git a/bot/modules/topgg/module.py b/bot/modules/topgg/module.py index 783d98a9..b6fb43f2 100644 --- a/bot/modules/topgg/module.py +++ b/bot/modules/topgg/module.py @@ -1,3 +1,48 @@ from LionModule import LionModule +from LionContext import register_reply_callback, unregister_reply_callback +from meta.client import client + +from .utils import * +from .webhook import init_webhook module = LionModule("Topgg") + +@module.launch_task +async def register_hook(client): + client.log("register_reply_hook " ) + + init_webhook() + register_reply_callback(reply) + +@module.unload_task +async def unregister_hook(client): + client.log("register_reply_hook " ) + + unregister_reply_callback(reply) + + +def reply(util_func, *args, **kwargs): + # *args will have LionContext + # **kwargs should have the actual reply() call's extra arguments + + if not get_last_voted_timestamp(args[0].author.id): + args = list(args) + if 'embed' in kwargs: + kwargs['embed'].add_field( + name="\u200b", + value=( + f"Upvote me to get 🌟**+25% Economy Boost**🌟 - Use `!vote`" + ), + inline=False + ) + elif 'content' in args and args['content']: + args['content'] += "\n\nUpvote me to get 🌟**+25% Economy Boost**🌟 - Use `!vote`" + elif len(args) > 1: + args[1] += "\n\nUpvote me to get 🌟**+25% Economy Boost**🌟 - Use `!vote`" + else: + args['content'] = "\n\nUpvote me to get 🌟**+25% Economy Boost**🌟 - Use `!vote`" + + args = tuple(args) + client.log('test') + + return [args, kwargs] diff --git a/bot/modules/topgg/topgg.py b/bot/modules/topgg/topgg.py deleted file mode 100644 index fd204324..00000000 --- a/bot/modules/topgg/topgg.py +++ /dev/null @@ -1,171 +0,0 @@ -from bot.cmdClient.checks.global_perms import in_guild -from meta import client -import discord -import topgg -import datetime - -from .module import module -from wards import guild_admin -from cmdClient.Context import Context -from . import data as db -from data.conditions import GEQ - -# This example uses topggpy's webhook system. -client.topgg_webhook = topgg.WebhookManager(client).dbl_webhook("/dblwebhook", "nopassword123") - -# The port must be a number between 1024 and 49151. -client.topgg_webhook.run(5000) # this method can be awaited as well - - -@client.event -async def on_dbl_vote(data): - """An event that is called whenever someone votes for the bot on Top.gg.""" - client.log(f"Received a vote: \n{data}") - - db.topggvotes.insert( - userid=data['user'], - boostedTimestamp = datetime.datetime.utcnow() - ) - - await send_user_dm(data['user']) - check_remainder_settings(data['user']) - - if data["type"] == "test": - return client.dispatch("dbl_test", data) - - -@client.event -async def on_dbl_test(data): - """An event that is called whenever someone tests the webhook system for your bot on Top.gg.""" - client.log(f"Received a test vote:\n{data}") - - -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: - await user.send("Thankyou for upvoting.\n https://cdn.discordapp.com/attachments/908283085999706153/930559064323268618/unknown.png") - except discord.HTTPException: - # Nothing we can really do here. Maybe tell the user about their reminder next time? - pass - - -from LionContext import register_reply_callback, unregister_reply_callback - -@module.launch_task -async def register_hook(client): - client.log("register_reply_hook " ) - - register_reply_callback(reply) - - -@module.unload_task -async def unregister_hook(client): - client.log("register_reply_hook " ) - - unregister_reply_callback(reply) - - -def reply(util_func, *args, **kwargs): - # *args will have LionContext - # **kwargs should have the actual reply() call's extra arguments - - author = args[0].author.id - - if not db.topggvotes.select_one_where( - userid=author, - # start_at=LEQ(utc_now() - datetime.timedelta(hours=1)), - # start_at=LEQ(utc_now()), - select_columns="boostedTimestamp", - boostedTimestamp=GEQ(datetime.datetime.utcnow() - datetime.timedelta(hours=12.5)), - _extra="ORDER BY boostedTimestamp DESC LIMIT 1" - ): - args = list(args) - if 'embed' in kwargs: - kwargs['embed'].add_field( - name="\u200b", - value=( - f"Upvote me to get 🌟**+25% Economy Boost**🌟 - Use `!vote`" - ), - inline=False - ) - elif 'content' in args and args['content']: - args['content'] += "\n\nUpvote me to get 🌟**+25% Economy Boost**🌟 - Use `!vote`" - elif len(args) > 1: - args[1] += "\n\nUpvote me to get 🌟**+25% Economy Boost**🌟 - Use `!vote`" - else: - args['content'] = "\n\nUpvote me to get 🌟**+25% Economy Boost**🌟 - Use `!vote`" - - args = tuple(args) - client.log('test') - - return [args, kwargs] - - -@module.cmd( - "forcevote", - desc="Simulate Topgg Vote.", - group="Guild Admin", - aliases=('debugvote', 'topggvote') -) -@guild_admin() -async def cmd_forcevote(ctx): - """ - Usage``: - {prefix}forcevote - Description: - Simulate Topgg Vote without actually a confirmation from Topgg site. - - Can be used for force a vote for testing or if topgg has an error or production time bot error. - """ - target = ctx.author - # Identify the target - if ctx.args: - if not ctx.msg.mentions: - return await ctx.error_reply("Please mention a user to simulate a vote!") - target = ctx.msg.mentions[0] - - - await on_dbl_vote({"user": target.id, "type": "test"}) - return await ctx.reply('Topgg vote simulation successful on {}'.format(target)) - - -@module.cmd( - "vote", - desc="Get Top.gg bot's link for Economy boost.", - group="Economy", - aliases=('topgg', 'topggvote', 'upvote') -) -@in_guild() -async def cmd_vote(ctx): - """ - Usage``: - {prefix}vote - Description: - Get Top.gg bot's link for +25% Economy boost. - """ - target = ctx.author - - return await ctx.reply('My Top.gg vote link is here: https://top.gg/bot/889078613817831495/vote \nThanks!') - - -@module.cmd( - "remind_vote", - group="Personal Settings", - desc="Turn on/off DM Remainder to Upvote me.", - long_help="Use this setting to enable/disable DM remainders from me to upvote on Top.gg." -) -async def cmd_remind_vote(ctx): - """ - Usage``: - {prefix}remind_vote on - {prefix}remind_vote off - - Use this setting to enable/disable DM remainders from me to upvote on Top.gg. - """ - pass \ No newline at end of file