[Topgg] Update module
- Implement Sending DM to user - Implement launch and unload tasks to register reply Ctx.Util calls - Implement reply callback handler - Implement !focevote cmd to simulate vote
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
from meta import client
|
||||
import discord
|
||||
import topgg
|
||||
import datetime
|
||||
|
||||
# client.log("test")
|
||||
|
||||
import topgg
|
||||
from .module import module
|
||||
from wards import guild_admin
|
||||
from cmdClient.Context import Context
|
||||
from . import data as db
|
||||
|
||||
# This example uses topggpy's webhook system.
|
||||
client.topgg_webhook = topgg.WebhookManager(client).dbl_webhook("/dblwebhook", "nopassword123")
|
||||
@@ -17,9 +19,15 @@ client.topgg_webhook.run(5000) # this method can be awaited as well
|
||||
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'])
|
||||
|
||||
if data["type"] == "test":
|
||||
# this is roughly equivalent to
|
||||
# `return await on_dbl_test(data)` in this case
|
||||
return client.dispatch("dbl_test", data)
|
||||
|
||||
|
||||
@@ -27,3 +35,90 @@ async def on_dbl_vote(data):
|
||||
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
|
||||
|
||||
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))
|
||||
|
||||
Reference in New Issue
Block a user