114 lines
4.6 KiB
Python
Raw Permalink Normal View History

2020-03-30 19:35:01 +03:00
import aiohttp
import discord
import json
2020-03-30 14:52:48 +03:00
2020-05-03 20:11:37 +03:00
from redbot.core import Config, commands
2020-04-10 13:56:56 +03:00
url = 'https://raw.githubusercontent.com/Kanium/KaniumCogs/master/welcomeCog/data/embedded_message.json'
2020-04-26 00:29:23 +03:00
allowed_guilds = {274657393936302080, 693796372092289024, 508781789737648138}
admin_roles = {'Developer', 'admin', 'Council'}
access_roles = {'HasAcceptedKaniumTerms'}
2020-05-03 20:04:33 +03:00
class WelcomeCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.message: str = ''
self.active = True
@staticmethod
async def fetchMessage():
async def fetch():
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
html = await response.text()
x = json.loads(str(html))
return x
return await fetch()
@staticmethod
def formatMessage(jsonFormat: str):
try:
message = discord.Embed(title=str(jsonFormat['title']), description=''.join(
map(str, jsonFormat['description'])), color=int(jsonFormat['color'], 16))
message.set_thumbnail(url=jsonFormat['thumbnail'])
for field in jsonFormat['fields']:
if (field['id'] != 'links'):
message.add_field(
name=field['name'], value=field['value'], inline=field['inline'])
else:
message.add_field(name=field['name'], value=''.join(
map(str, field['value'])), inline=field['inline'])
message.set_footer(
text=jsonFormat['footer']['text'], icon_url=jsonFormat['footer']['icon_url'])
return message
except:
message = discord.Embed(
title='Kanium', description='', color=0x3399ff)
message.add_field(
name='Welcome', value='Welcome To Kanium !', inline=True)
return message
@commands.command(name='pullmessage', description='pulls the message from github again')
@commands.has_any_role(*admin_roles)
async def pullMessage(self, ctx: commands.Context) -> None:
try:
await ctx.trigger_typing()
self.message = await WelcomeCog.fetchMessage()
await ctx.send('Welcome message updated')
except:
print('error occured fetching message')
2020-04-26 01:56:51 +03:00
@commands.command(name='welcomepreview', case_insensitive=True, description='Shows a preview of the welcome message')
@commands.has_any_role(*admin_roles)
async def previewMessage(self, ctx: commands.Context) -> None:
2020-04-26 00:29:23 +03:00
try:
await ctx.trigger_typing()
2020-04-26 00:29:23 +03:00
if ctx.guild.id not in allowed_guilds:
return
if self.message == '':
self.message = await WelcomeCog.fetchMessage()
message = WelcomeCog.formatMessage(self.message)
2020-04-26 00:29:23 +03:00
await ctx.send(content=None, embed=message)
except Exception as e:
print(f'Error occurred while previewing the welcome message: {e}')
@commands.command(name='dmWelcomeMessage', case_insensitive=True, description='Sends')
@commands.has_any_role(*access_roles)
async def dmWelcomeMessage(self, ctx: commands.Context) -> None:
try:
await ctx.trigger_typing()
if ctx.guild.id not in allowed_guilds:
return
if self.message == '':
self.message = await WelcomeCog.fetchMessage()
message = WelcomeCog.formatMessage(self.message)
await ctx.author.send(content=None, embed=message)
except Exception as e:
print(f'Error occurred while previewing the welcome message: {e}')
2020-04-25 20:25:45 +03:00
@commands.Cog.listener()
async def on_member_join(self, member: discord.Member) -> None:
2020-03-30 19:17:55 +03:00
try:
if not self.active: # Check if the listener is active
return
if member.guild.id not in allowed_guilds:
return
2020-03-30 19:40:47 +03:00
if self.message == '':
self.message = await WelcomeCog.fetchMessage()
message = WelcomeCog.formatMessage(self.message)
2020-03-30 19:17:55 +03:00
await member.send(content=None, embed=message)
except (discord.NotFound, discord.Forbidden):
2020-04-26 00:29:23 +03:00
print(
f'Error Occured! sending a dm to {member.display_name} didnt work !')
@commands.command(name='togglewelcome', case_insensitive=True, description='Toggles the welcome message listener')
@commands.has_any_role(*admin_roles)
async def toggleWelcome(self, ctx: commands.Context) -> None:
self.active = not self.active
await ctx.send(f'Welcome message listener {"activated" if self.active else "deactivated"}')