fix(bot): 🐛 Servers leaderboard now updating.

This commit is contained in:
Nyeki.py
2024-10-19 21:24:29 -03:00
parent 398fc2cb93
commit 9b0deec19e
6 changed files with 66 additions and 51 deletions
+21 -43
View File
@@ -7,8 +7,9 @@ from discord.ext import commands, tasks
from tortoise import transactions, functions, exceptions
from payphone import bot
from payphone.db import models, utils
from payphone.db import utils as dbutils, models
from payphone.cogs import base
from payphone.core import utils
class Admin(base.Cog):
@@ -37,54 +38,31 @@ class Admin(base.Cog):
)
)
# ID to count
servers_count_map: dict[int, int] = {}
servers_map: dict[int, models.Server] = {
rs.channel.server_id: rs.channel.server
for call in calls
for rs in call.call_rss
}
# ID: Count
servers_map: dict[int, int] = {}
servers: dict[int, models.Server] = {}
for call in calls:
for rs in call.call_rss:
if rs.channel.server_id in servers_count_map:
servers_count_map[rs.channel.server_id] += 1
for rs in utils.deduplicate(call.call_rss, lambda i: i.channel.server_id):
server_id = rs.channel.server_id
servers[server_id] = rs.channel.server
if server_id in servers_map:
servers_map[server_id] += 1
else:
servers_count_map[rs.channel.server_id] = 0
servers_map[server_id] = 1
server_counts = list(servers_count_map.items())
server_counts = sorted(servers_map.items(), key=lambda i: i[1])
server_counts.sort(key=lambda i: i[1], reverse=True)
for server_map in server_counts[:10]:
if servers_map[server_map[0]].name is None:
try:
guild = await self.bot.fetch_guild(server_map[0])
except errors.DiscordException:
continue
servers_map[server_map[0]].name = guild.name
try:
vanity = await guild.vanity_invite()
except errors.DiscordException:
continue
if vanity is not None:
servers_map[server_map[0]].vanity_code = vanity.code
for i, server_map in enumerate(server_counts):
servers_map[server_map[0]].leaderboard_position = i + 1
servers_map[server_map[0]].leaderboard_calls_count = server_map[1]
for pos, (server_id, calls_count) in enumerate(server_counts):
servers[server_id].leaderboard_calls_count = calls_count
servers[server_id].leaderboard_position = pos + 1
await models.Server.bulk_update(
servers_map.values(),
["name", "vanity_code", "leaderboard_position", "leaderboard_calls_count"],
500,
servers.values(),
["leaderboard_calls_count", "leaderboard_position"],
batch_size=500,
)
@commands.Cog.listener()
@@ -183,7 +161,7 @@ class Admin(base.Cog):
)
else:
row = await utils.get_channel(channel)
row = await dbutils.get_channel(channel)
row.enabled = True
await row.save()
@@ -211,7 +189,7 @@ class Admin(base.Cog):
channel = channel or ctx.channel
row = await utils.get_channel(channel)
row = await dbutils.get_channel(channel)
row.enabled = False
await row.save()