1
0
Fork 0
mirror of synced 2024-05-18 19:42:28 +12:00
Bonfire/cogs/events.py
2018-05-24 00:09:42 -05:00

136 lines
5.1 KiB
Python

from .utils import config
import aiohttp
import logging
import json
import discord
log = logging.getLogger()
discord_bots_url = 'https://bots.discord.pw/api/bots/{}/stats'
discordbots_url = "https://discordbots.org/api/bots/{}/stats"
carbonitex_url = 'https://www.carbonitex.net/discord/data/botdata.php'
class StatsUpdate:
"""This is used purely to update stats information for the bot sites"""
def __init__(self, bot):
self.bot = bot
self.session = aiohttp.ClientSession()
def __unload(self):
self.bot.loop.create_task(self.session.close())
async def update(self):
server_count = len(self.bot.guilds)
# Carbonitex request
carbon_payload = {
'key': config.carbon_key,
'servercount': server_count
}
async with self.session.post(carbonitex_url, data=carbon_payload) as resp:
log.info('Carbonitex statistics returned {} for {}'.format(resp.status, carbon_payload))
# Discord.bots.pw request
payload = json.dumps({
'server_count': server_count
})
headers = {
'authorization': config.discord_bots_key,
'content-type': 'application/json'
}
url = discord_bots_url.format(self.bot.user.id)
async with self.session.post(url, data=payload, headers=headers) as resp:
log.info('bots.discord.pw statistics returned {} for {}'.format(resp.status, payload))
# discordbots.com request
url = discordbots_url.format(self.bot.user.id)
payload = {
"server_count": server_count
}
headers = {
"Authorization": config.discordbots_key
}
async with self.session.post(url, data=payload, headers=headers) as resp:
log.info('discordbots.com statistics retruned {} for {}'.format(resp.status, payload))
async def on_guild_join(self, _):
self.bot.loop.create_task(self.update())
async def on_guild_leave(self, _):
self.bot.loop.create_task(self.update())
async def on_ready(self):
self.bot.loop.create_task(self.update())
async def on_member_join(self, member):
guild = member.guild
server_settings = self.bot.db.load('server_settings', key=str(guild.id))
try:
join_leave_on = server_settings['join_leave']
if join_leave_on:
# Get the notifications settings, get the welcome setting
notifications = self.bot.db.load('server_settings', key=guild.id, pluck='notifications') or {}
# Set our default to either the one set, or the default channel of the server
default_channel_id = notifications.get('default')
# If it is has been overriden by picarto notifications setting, use this
channel_id = notifications.get('welcome') or default_channel_id
# Get the message if it exists
join_message = self.bot.db.load('server_settings', key=guild.id, pluck='welcome_message')
if not join_message:
join_message = "Welcome to the '{server}' server {member}!"
else:
return
except (IndexError, TypeError, KeyError):
return
if channel_id:
channel = guild.get_channel(int(channel_id))
else:
return
try:
await channel.send(join_message.format(server=guild.name, member=member.mention))
except (discord.Forbidden, discord.HTTPException, AttributeError):
pass
async def on_member_remove(self, member):
guild = member.guild
server_settings = self.bot.db.load('server_settings', key=str(guild.id))
try:
join_leave_on = server_settings['join_leave']
if join_leave_on:
# Get the notifications settings, get the welcome setting
notifications = self.bot.db.load('server_settings', key=guild.id, pluck='notifications') or {}
# Set our default to either the one set, or the default channel of the server
default_channel_id = notifications.get('default')
# If it is has been overriden by picarto notifications setting, use this
channel_id = notifications.get('welcome') or default_channel_id
# Get the message if it exists
leave_message = self.bot.db.load('server_settings', key=guild.id, pluck='goodbye_message')
if not leave_message:
leave_message = "{member} has left the server, I hope it wasn't because of something I said :c"
else:
return
except (IndexError, TypeError, KeyError):
return
if channel_id:
channel = guild.get_channel(int(channel_id))
else:
return
try:
await channel.send(leave_message.format(server=guild.name, member=member.name))
except (discord.Forbidden, discord.HTTPException, AttributeError):
pass
def setup(bot):
bot.add_cog(StatsUpdate(bot))