async def on_member_join(self, member): general_channel_id = get_channel_id(member.guild.id, "channel_general") channel = self.bot.get_channel(general_channel_id) card = Image.open(os.path.join(f"{IMAGE_PATH}//welcome//backgrounds//", f"background_{random.randint(1,14)}.png")) av_outline_circle = Image.open(os.path.join(f"{IMAGE_PATH}//welcome//utils//", f"black_circle.png")) alpha_plate = Image.open(os.path.join(f"{IMAGE_PATH}//welcome//utils//", f"alpha_plate.png")) welcome_text_plate = Image.open(os.path.join(f"{IMAGE_PATH}//welcome//utils//", f"welcome_plate.png")) avatar_img = Image.open(requests.get(member.avatar_url_as(size=1024), stream=True).raw).convert("RGBA") avatar_img = round_image(avatar_img.resize((363,363))) draw = ImageDraw.Draw(card) card.paste(alpha_plate, (100,100), alpha_plate) card.paste(welcome_text_plate, (569,20), welcome_text_plate) card.paste(av_outline_circle, (566,114), av_outline_circle) card.paste(avatar_img, ((569,117)), avatar_img) _text_width, _h = draw.textsize(f"{member.name}#{member.discriminator}", ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 70)) draw.text(((1500-_text_width)/2 ,501), f"{member.name}", font=ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 70), fill=(255,255,255)) _w, _h = draw.textsize(f"{member.name}", ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 70)) draw.text(((1500-_text_width)/2 + _w + 3,501), f"#{member.discriminator}", font=ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 70), fill=(81,81,81)) _text_width, _h = draw.textsize(f"Member #{member.guild.member_count}", ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 55)) draw.text(((1500-_text_width)/2 ,574), f"Member #{member.guild.member_count}", font=ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 55), fill=(255,255,255)) card.save(os.path.join(f"{IMAGE_PATH}//temp//","temp_welcome.png")) await channel.send(file=discord.File(os.path.join(f"{IMAGE_PATH}//temp//","temp_welcome.png")))
async def _ban(self, ctx, member: discord.Member = None, *, reason=None): f""" {self.bot.command_prefix}{ctx.command.name} <member> <reason> """ if member is None: raise MissingArgument("Discord User", get_command_description(ctx.command.name)) try: await member.ban(reason=reason) except: raise MissingPermissionOnMember("ban", member) await ctx.message.delete() await ctx.channel.trigger_typing() log_channel = self.bot.get_channel( get_channel_id(member.guild.id, "channel_logs")) embed = discord.Embed( description=f" ", timestamp=datetime.utcnow(), color=0xff0000).set_author( name=f"{ctx.author} banned member", icon_url=f"{ctx.author.avatar_url}").add_field( name="User", value=f"{member.mention}").add_field( name="Punishment", value=f"Banned").add_field(name="Reason", value=f"{reason}") await log_channel.send(embed=embed) await member.send(embed=embed) await member.send( "https://cdn.discordapp.com/attachments/811885989005492276/812847731461849108/y2mate.com_-_ARSENAL_FAN_TV_ITS_TIME_TO_GO_MEME_360p_1.mp4" )
async def _kick(self, ctx, member: discord.Member = None, *, reason=None): f""" {self.bot.command_prefix}{ctx.command.name} <member> <reason> """ if member is None: raise MissingArgument("Discord User", get_command_description(ctx.command.name)) try: await member.kick(reason=reason) except: raise MissingPermissionOnMember("kick", member) await ctx.message.delete() await ctx.channel.trigger_typing() log_channel = self.bot.get_channel( get_channel_id(member.guild.id, "channel_logs")) embed = discord.Embed( title="", description=f" ", timestamp=datetime.utcnow(), color=0xff0000).set_author( name=f"{ctx.author} kicked member", icon_url=f"{ctx.author.avatar_url}").add_field( name="User", value=f"{member.mention}").add_field( name="Punishment", value=f"Kicked").add_field(name="Reason", value=f"{reason}") await log_channel.send(embed=embed) await member.send(embed=embed)
async def _warn(self, ctx, member: discord.Member, *, reason="None"): f""" {self.bot.command_prefix}{ctx.command.name} <member> <reason> """ _db = get_cluster(ctx.guild.id, "CLUSTER_WARN") new_warn = ({ "warned_user_name": str(member), "warned_user_id": member.id, "warn_reason": reason, "moderator_name": str(ctx.author), "moderator_id": ctx.author.id, "time": datetime.utcnow() }) _db.insert(new_warn) embed = discord.Embed( title="", description=f" ", timestamp=datetime.utcnow(), color=0xff0000).set_author( name=f"{ctx.author} warned a user", icon_url=f"{ctx.author.avatar_url}").add_field( name="Warned User", value=f"{member.mention}").add_field(name="Reason", value=f"{reason}") log_channel = self.bot.get_channel( get_channel_id(member.guild.id, "channel_logs")) await log_channel.send(embed=embed) await ctx.channel.send(embed=embed)
async def _mute_user(self, ctx, member, time="Indefinite", reason="None"): channel = self.bot.get_channel( get_channel_id(member.guild.id, "channel_logs")) try: muted_role = get(ctx.guild.roles, name="Muted") except: await ctx.message.guild.create_role(name="Muted", colour=0x505050) if muted_role in member.roles: return await member.add_roles(muted_role) timestr = "" if str(time).endswith("d"): timestr += f"{str(time)[:-1]} day" if str( time)[:-1] == "1" else f"{str(time)[:-1]} days" elif str(time).endswith("h"): timestr += f"{str(time)[:-1]} hour" if str( time)[:-1] == "1" else f"{str(time)[:-1]} hour" elif str(time).endswith("m"): timestr += f"{str(time)[:-1]} minute" if str( time)[:-1] == "1" else f"{str(time)[:-1]} minutes" elif str(time).endswith("s"): timestr += f"{str(time)[:-1]} second" if str( time)[:-1] == "1" else f"{str(time)[:-1]} seconds" embed = discord.Embed( description=f" ", timestamp=datetime.utcnow(), color=0xff0000).set_author( name=f"{ctx.author} muted member", icon_url=f"{ctx.author.avatar_url}").add_field( name="Muted User", value=f"{member.mention}").add_field( name="Reason", value=f"{reason}").add_field(name="Time", value=f"{timestr}") await ctx.send(embed=embed) if time != 'Indefinite': time_to_seconds = int(re.findall( r'\d+', str(time))[0]) * converter( re.sub('[^a-zA-Z]+', '', time)) end_date = datetime.utcnow() + timedelta(seconds=time_to_seconds) _db = get_cluster(ctx.guild.id, "CLUSTER_MUTE") greenie = ({"id": member.id, "end_date": end_date}) _db.insert(greenie) await asyncio.sleep(time_to_seconds) else: await member.add_roles(muted_role)
async def _unmute_user(self, member): try: channel1 = self.bot.get_channel( get_channel_id(member.guild.id, "channel_logs")) muted_role = get(member.guild.roles, name="Muted") await member.remove_roles(muted_role) embed = discord.Embed( description=f" ", timestamp=datetime.utcnow(), color=0xff0000).set_author( name=f"{member} is now unmuted", icon_url=f"{member.avatar_url}").add_field( name="Unmuted User", value=f"{member.mention}") await channel1.send(embed=embed) except: pass
async def on_message(self, message): if isinstance(message.channel, discord.channel.DMChannel): return channel = self.bot.get_channel( get_channel_id(message.guild.id, "channel_general")) if channel != message.channel: return if not message.author.bot: _db = get_cluster(message.guild.id, "CLUSTER_EXPERIENCE") stats = _db.find_one({"id": message.author.id}) if stats is None: greenie = ({ "id": message.author.id, "xp": 5, }) _db.insert(greenie) else: xp = stats["xp"] + 5 lvl = 0 _db.update_one({"id": message.author.id}, {"$set": {"xp": xp}}) while True: if xp < ((50 * (lvl**2)) + (50 * (lvl - 1))): break lvl += 1 xp -= ((50 * ((lvl - 1)**2)) + (50 * (lvl - 1))) if xp == 0: embed = discord.Embed( description= f"{message.author.mention} Reached Level {lvl}!" ).set_image(url="https://i.imgur.com/qgpcufH.gif") await message.channel.send(embed=embed)
async def on_message_edit(self, before_edit, after_edit): log_channel = self.bot.get_channel(get_channel_id(before_edit.guild.id, "channel_logs")) if before_edit.content == after_edit.content: return if any(word in after_edit.content.lower() for word in get_cluster(before_edit.guild.id, "CLUSTER_BLACKLIST_WORDS").find_one({"id": "type_blacklist"})["array"]): await before_edit.delete() self.temp_message_edit_before = before_edit self.temp_message_edit_after = after_edit channel_id = before_edit.channel.id message_id = before_edit.id message_link = "https://discord.com/channels/787823476966162452" + f"/{channel_id}" + f"/{message_id}" embed=discord.Embed(title="", description=f"Message edited in: {before_edit.channel.mention}\n[Go To Message]({message_link})", timestamp=datetime.utcnow(), color=0x800080 ).set_author(name=f"{before_edit.author}", icon_url=f"{before_edit.author.avatar_url}" ).add_field(name="Before", value=f"{before_edit.content}", inline=False ).add_field(name="After", value=f"{after_edit.content}" ) await log_channel.send(embed=embed)
async def _esnipe(self, ctx): f""" {self.bot.command_prefix}{ctx.command.name} """ try: before_edit = self.temp_message_edit_before after_edit = self.temp_message_edit_after except: await ctx.send("Nothing to snipe!") return if ctx.message.channel == self.temp_message_edit_before.channel: gif_arr = get_cluster(ctx.message.guild.id, "CLUSTER_GIFS").find_one({"id": "type_snipe_gifs"})["array"] before_edit_content = self.temp_message_edit_before.content after_edit_content = self.temp_message_edit_after.content try: for word in get_cluster(ctx.message.guild.id, "CLUSTER_BLACKLIST_WORDS").find_one({"id": "type_blacklist"})["array"]: before_edit_content = before_edit_content.lower().replace(word, "[redacted]") after_edit_content = after_edit_content.lower().replace(word, "[redacted]") except: pass message_id = before_edit.id channel_id = get_channel_id(ctx.message.guild.id, "channel_general") message_link = f"https://discord.com/channels/{ctx.message.guild.id}/{channel_id}" + f"/{message_id}" embed=discord.Embed( description=f"Message edited in: {before_edit.channel.mention}\n[Go To Message]({message_link})", timestamp=datetime.utcnow(), color=0x800080 ).set_author(name=f"{before_edit.author} was sniped!", icon_url=f"{before_edit.author.avatar_url}" ).add_field(name="Before", value=f"{before_edit_content}", inline=False ).add_field(name="After", value=f"{after_edit_content}" ).set_image(url=choice(gif_arr) ) await ctx.send(embed=embed)
async def on_message_delete(self, message): if message.content == "": return async for entry in message.guild.audit_logs(action=discord.AuditLogAction.message_delete, limit=1): now = datetime.utcnow() if now - timedelta(seconds=2) <= entry.created_at <= now+timedelta(seconds=2): self.deletee = entry.user else: self.deletee = message.author log_channel = self.bot.get_channel(get_channel_id(message.guild.id, "channel_logs")) if message.author.bot: return if str(self.author_temp) != str(message.author): deleted_messages.clear() self.author_temp = message.author if not message.content.startswith("?"): _db = get_cluster(message.guild.id, "CLUSTER_BLACKLIST_WORDS").find_one({"id": "type_blacklist"})["array"] for word in _db: message.content = message.content.lower().replace(word, "[redacted]") deleted_messages.append(message) embed=discord.Embed( description=f"Message deleted in: {message.channel.mention} by {self.deletee.mention}" if message.content[0:2] != "?m" else f"**Mirrored** message in: {message.channel.mention}", timestamp=datetime.utcnow(), color=0xff0000 ).set_author(name=f"{message.author}", icon_url=f"{message.author.avatar_url}" ).add_field(name="Content", value=f"{message.content}" ).add_field(name="ID", value=f"```ml\nUser = {message.author.id}\nMessage = {message.id}\n```", inline=False ) await log_channel.send(embed=embed)