fix(bot): 🐛 Servers leaderboard now updating.
This commit is contained in:
+21
-43
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user