1
0
Fork 0
mirror of synced 2024-06-28 11:10:27 +12:00

Added the ability to get server/member count across all shards

This commit is contained in:
phxntxm 2016-08-31 19:07:38 -05:00
parent d0f81a3f1a
commit d8b2fcb3a2
3 changed files with 26 additions and 14 deletions

View file

@ -63,19 +63,22 @@ class Core:
# The only real use of doing it this way is easier editing if the info in this command is changed
fmt = {}
all_members = list(self.bot.get_all_members())
bot_data = config.get_content('bot_data')
total_data = {}
for shard, values in bot_data.items():
for key, value in values.items():
if key in total_data:
total_data[key] += value
else:
total_data[key] = value
# We can pretty safely assume that the author is going to be in at least one channel with the bot
# So find the author based on that list
authors = []
for author_id in config.owner_ids:
authors.append(discord.utils.get(all_members, id=author_id).name)
fmt['Official Bot Server'] = config.dev_server
fmt['Author'] = ", ".join(authors)
fmt['Uptime'] = (pendulum.utcnow() - self.bot.uptime).in_words()
fmt['Total Servers'] = len(self.bot.servers)
fmt['Total Members'] = len(all_members)
fmt['Total Servers'] = total_data.get('server_count')
fmt['Total Members'] = total_data.get('member_count')
fmt['Description'] = self.bot.description
servers_playing_music = len([server_id for server_id, state in self.bot.get_cog('Music').voice_states.items() if

View file

@ -44,12 +44,27 @@ class StatsUpdate:
async def on_server_join(self, server):
await self.update()
data = await config.get_content('bot_data')
shard_data = data.get('shard_{}'.format(config.shard_id))
shard_data['server_count'] = len(self.bot.servers)
shard_data['member_count'] = len(list(self.bot.get_all_members()))
await config.save_content('bot_data')
async def on_server_leave(self, server):
await self.update()
data = await config.get_content('bot_data')
shard_data = data.get('shard_{}'.format(config.shard_id))
shard_data['server_count'] = len(self.bot.servers)
shard_data['member_count'] = len(list(self.bot.get_all_members()))
await config.save_content('bot_data')
async def on_ready(self):
await self.update()
data = await config.get_content('bot_data')
shard_data = data.get('shard_{}'.format(config.shard_id))
shard_data['server_count'] = len(self.bot.servers)
shard_data['member_count'] = len(list(self.bot.get_all_members()))
await config.save_content('bot_data')
def setup(bot):

View file

@ -93,12 +93,6 @@ sharded_data = {}
# cache[k] = Cache(k)
def get_bot_data(key):
# This method will handle data that we'd like to get across all shards
# First get the bot's data from cache or the database
bot_data = get_content('bot_data')
def command_prefix(bot, message):
# We do not want to make a query for every message that is sent
# So assume it's in cache, or it doesn't exist
@ -138,7 +132,7 @@ async def save_content(table: str, content):
async def disabled_get_content(key: str):
cached = cache.get('key')
if cached is None:
if cached is None or len(cached) == 0:
value = await _get_content(key)
# If we found this object not cached, cache it
cache['key'] = value