async def userinfo(self, ctx, user: discord.Member = None): """Get user information""" if user is None: user = ctx.author roles = [x.mention for x in user.roles if x.name != "@everyone"] roles = ', '.join(roles) embed = discord.Embed(colour=0x36393E) embed.set_thumbnail(url=user.avatar_url) embed.add_field(name="Name", value=user, inline=True) if hasattr(user, "nick"): embed.add_field(name="Nickname", value=user.nick, inline=True) else: embed.add_field(name="Nickname", value="No nickname.", inline=True) embed.add_field(name="Joined Discord on", value=default.date(user.created_at), inline=True) if hasattr(user, "joined_at"): embed.add_field(name="Joined this server on", value=default.date(user.joined_at), inline=True) if roles != "": embed.add_field(name="Roles", value=roles) else: embed.add_field(name="Roles", value="User has no roles.") await ctx.send(embed=embed)
async def user(self, ctx, user: discord.Member = None): """ Get user information """ if user is None: user = ctx.author embed = discord.Embed(color=user.color) embed.set_thumbnail(url=user.avatar_url) embed.add_field(name="Full name", value=user, inline=True) if hasattr(user, "nick"): embed.add_field(name="Nickname", value=user.nick, inline=True) else: embed.add_field(name="Nickname", value="None", inline=True) embed.add_field(name="Account created", value=default.date(user.created_at), inline=True) if hasattr(user, "joined_at"): embed.add_field(name="Joined this server", value=default.date(user.joined_at), inline=True) await ctx.send(content=f"ℹ About **{user.id}**", embed=embed)
async def user_info(self, ctx, *, user: discord.Member = None): """ 取得使用者自己的資訊 """ user = user or ctx.author show_roles = ', '.join([ f"<@&{x.id}>" for x in sorted(user.roles, key=lambda x: x.position, reverse=True) if x.id != ctx.guild.default_role.id ]) if len(user.roles) > 1 else '空空如也' embed = discord.Embed(colour=user.top_role.colour.value) embed.set_thumbnail(url=user.avatar_url) embed.add_field(name="名字", value=user, inline=True) embed.add_field(name="暱稱", value=user.nick if hasattr(user, "nick") else "無", inline=True) embed.add_field(name="建立帳號於", value=default.date(user.created_at), inline=True) embed.add_field(name="加入伺服器於", value=default.date(user.joined_at), inline=True) embed.add_field(name="身份組", value=show_roles, inline=False) await ctx.send(content=f"ℹ 汪嗚!窩找到了<@{user.id}>的名片哦 ٩(。・ω・。)و", embed=embed)
async def user(self, ctx, *, user: discord.Member = None): """ Get user information """ user = user or ctx.author show_roles = ', '.join([ f"<@&{x.id}>" for x in sorted(user.roles, key=lambda x: x.position, reverse=True) if x.id != ctx.guild.default_role.id ]) if len(user.roles) > 1 else 'None' embed = discord.Embed(colour=user.top_role.colour.value) embed.set_thumbnail(url=user.avatar_url) embed.add_field(name="Full name", value=user, inline=True) embed.add_field(name="Nickname", value=user.nick if hasattr(user, "nick") else "None", inline=True) embed.add_field(name="Account created", value=default.date(user.created_at), inline=True) embed.add_field(name="Joined this server", value=default.date(user.joined_at), inline=True) embed.add_field(name="Roles", value=show_roles, inline=False) await ctx.send(content=f"ℹ About **{user.id}**", embed=embed)
async def about(self, ctx): """ About the bot """ ramUsage = self.process.memory_full_info().rss / 1024**2 avgmembers = sum(g.member_count for g in self.bot.guilds) / len(self.bot.guilds) embedColour = None if hasattr(ctx, "guild") and ctx.guild is not None: embedColour = ctx.me.top_role.colour embed = discord.Embed(colour=embedColour) embed.set_thumbnail(url=ctx.bot.user.avatar) embed.add_field(name="Last boot", value=default.date(self.bot.uptime, ago=True)) embed.add_field( name=f"Developer{'' if len(self.config['owners']) == 1 else 's'}", value=", ".join( [str(self.bot.get_user(x)) for x in self.config["owners"]])) embed.add_field(name="Library", value="discord.py") embed.add_field( name="Servers", value= f"{len(ctx.bot.guilds)} ( avg: {avgmembers:,.2f} users/server )") embed.add_field(name="Commands loaded", value=len([x.name for x in self.bot.commands])) embed.add_field(name="RAM", value=f"{ramUsage:.2f} MB") await ctx.send(content=f"ℹ About **{ctx.bot.user}**", embed=embed)
async def server(self, ctx): """ Check info about current server """ if ctx.invoked_subcommand is None: findbots = sum(1 for member in ctx.guild.members if member.bot) embed = discord.Embed() if ctx.guild.icon: embed.set_thumbnail(url=ctx.guild.icon_url) if ctx.guild.banner: embed.set_image(url=ctx.guild.banner_url_as(format="png")) embed.add_field(name="Server Name", value=ctx.guild.name, inline=True) embed.add_field(name="Server ID", value=ctx.guild.id, inline=True) embed.add_field(name="Members", value=ctx.guild.member_count, inline=True) embed.add_field(name="Bots", value=findbots, inline=True) embed.add_field(name="Owner", value=ctx.guild.owner, inline=True) embed.add_field(name="Region", value=ctx.guild.region, inline=True) embed.add_field(name="Created", value=default.date(ctx.guild.created_at), inline=True) await ctx.send(content=f"ℹ information about **{ctx.guild.name}**", embed=embed)
async def server(self, ctx): """ 查看頻道的資訊。 """ if ctx.invoked_subcommand is None: findbots = sum(1 for member in ctx.guild.members if member.bot) embed = discord.Embed() if ctx.guild.icon: embed.set_thumbnail(url=ctx.guild.icon_url) if ctx.guild.banner: embed.set_image(url=ctx.guild.banner_url_as(format="png")) embed.add_field(name="頻道名稱", value=ctx.guild.name, inline=True) embed.add_field(name="頻道 ID", value=ctx.guild.id, inline=True) embed.add_field(name="會員人數", value=ctx.guild.member_count, inline=True) embed.add_field(name="機器人數量", value=str(findbots), inline=True) embed.add_field(name="管理員", value=ctx.guild.owner, inline=True) embed.add_field(name="位址", value=ctx.guild.region, inline=True) embed.add_field(name="建立於", value=default.date(ctx.guild.created_at), inline=True) await ctx.send( content=f"ℹ 這是 **{ctx.guild.name}** 頻道的基本資訊哦汪嗚 ٩(。・ω・。)و", embed=embed)
async def serverinfo(self, ctx): """Check info about current server """ members = set(ctx.guild.members) offline = filter(lambda m: m.status is discord.Status.offline, members) offline = set(offline) bots = filter(lambda m: m.bot, members) bots = set(bots) users = members - bots embed = discord.Embed(colour=0x36393E) embed.set_thumbnail(url=ctx.guild.icon_url) embed.add_field(name="Server Name", value=ctx.guild.name, inline=True) embed.add_field(name="Server ID", value=ctx.guild.id, inline=True) embed.add_field(name="Owner", value=ctx.guild.owner, inline=True) embed.add_field(name="Region", value=ctx.guild.region, inline=True) embed.add_field(name="Created on", value=default.date(ctx.guild.created_at), inline=True) embed.add_field( name="Users", value= f"**Total Users:** {len(users)}\n**Users Online:** {len(users - offline)}\n**Users Offline:** {len(users & offline)}", inline=True) embed.add_field( name="Bots", value= f"**Total Bots:** {len(bots)}\n**Bots Online:** {len(bots - offline)}\n**Bots Offline:** {len(bots & offline)}", inline=True) await ctx.send(embed=embed)
async def on_member_join(self, member): channel = self.bot.get_channel(Channel id goes here) embed = discord.Embed(color=0x21d3f3) embed.description = f"**{member.mention}** just joined!" embed.add_field(name="User Number:", value=len(list(member.guild.members)), inline=False) embed.add_field(name="Guild ID:", value=member.guild.id, inline=False) embed.add_field(name="Account created:", value=default.date(member.created_at), inline=False) await channel.send(embed=embed)
async def on_member_update(self, before, after): channel = self.bot.get_channel(set channel id here) author_id = str(after.id) if len(before.roles) < len(after.roles): new_role = next(role for role in after.roles if role not in before.roles) if new_role.name in ('-online-'): try: embed = discord.Embed(color=0x21d3f3) embed.description = f"{after.mention} just verified!" embed.add_field(name="Account created:", value=default.date(after.created_at), inline=True) embed.add_field(name="Joined this server:", value=default.date(after.joined_at), inline=False) embed.add_field(name="Verification:", value=":white_check_mark: Verified!", inline=False) await channel.send(embed=embed) return await channel.send(f"{after.mention} Change your color by doing .color [hexcode]") except Exception as e: await channel.send(f"{e}")
async def user_info(self, ctx, user: discord.Member = None): user = user or ctx.author embed = discord.Embed(title=f"**{user}**", colour=user.colour) embed.set_thumbnail(url=user.avatar_url) embed.add_field(name="Current display name", value=user.display_name, inline=False) embed.add_field(name="Joined Discord", value=default.date(user.created_at), inline=False) embed.add_field(name="Joined server", value=default.date(user.joined_at), inline=False) embed.add_field(name="Highest role in server", value=user.top_role.mention, inline=False) await ctx.send(embed=embed)
async def userinfo(self, ctx, *, user: discord.Member = None): """ Get user information """ if user is None: user = ctx.author embed = discord.Embed(colour=self.bot.embed_color) shared = str(len([i for i in ctx.bot.guilds if i.get_member(user.id)])) embed.add_field(name=get_text(ctx.guild, 'info', 'info.name'), value=user, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.nick'), value=user.nick if hasattr(user, "nick") else get_text(ctx.guild, 'info', 'info.none'), inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.acc_created'), value=default.date(user.created_at), inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.user_id'), value=user.id) embed.add_field(name=get_text(ctx.guild, 'info', 'info.bot'), value=user.bot) embed.add_field(name=get_text(ctx.guild, 'info', 'info.joined_server'), value=default.date(user.joined_at), inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.shared'), value=shared) embed.add_field(name=get_text(ctx.guild, 'info', 'info.avatar'), value=f"[{get_text(ctx.guild, 'info', 'info.click')}]({user.avatar_url})") acknowledgements = [] supportguild = self.bot.get_guild(514232441498763279) if user == self.bot.get_user(self.bot.owner_id): owner = "<:owner:621436626257838090> " + get_text(ctx.guild, 'info', 'info.acknowledgements.owner') acknowledgements.append(owner) translator_role = supportguild.get_role(592319743692898326) if user in supportguild.members: if user in translator_role.members: translator = "<:google_tr:621435195102461952> " + get_text(ctx.guild, 'info', 'info.acknowledgements.translator') acknowledgements.append(translator) bughunter_role = supportguild.get_role(521132262587236364) if user in supportguild.members: if user in bughunter_role.members: bughunter = "<:bughunter:633796873144238090> Bug Hunter" acknowledgements.append(bughunter) embed.add_field(name=get_text(ctx.guild, 'info', 'info.status'), value=f"**{get_text(ctx.guild, 'info', 'info.status.mobile')}:** {user.mobile_status}\n**{get_text(ctx.guild, 'info', 'info.status.desktop')}:** {user.desktop_status}\n**{get_text(ctx.guild, 'info', 'info.status.web')}:** {user.web_status}") if acknowledgements: embed.add_field(name=get_text(ctx.guild, 'info', 'info.acknowledgements'), value="\n".join(acknowledgements)) embed.set_thumbnail(url=user.avatar_url_as(static_format='png')) userroles = [] for role in user.roles: userroles.append(role.id) userroles = userroles[::-1][:-1] embed.add_field( name=get_text(ctx.guild, 'info', 'info.roles'), value=', '.join([f"<@&{x}>" for x in userroles]) if len(user.roles) > 1 else get_text(ctx.guild, 'info', 'info.none'), inline=False ) await ctx.send(content="<:info:603362826358095922> " + get_text(ctx.guild, 'info', 'info.info_about').format(user), embed=embed)
async def joindate(self, ctx, *, user: discord.Member = None): """ Check when a user joined the current server """ if user is None: user = ctx.author embed = discord.Embed(colour=self.bot.embed_color) embed.set_thumbnail(url=user.avatar_url) embed.description = get_text(ctx.guild, 'info', 'info.join_date').format( user, ctx.guild.name, default.date(user.joined_at)) await ctx.send(embed=embed)
async def about(self, ctx): version = self.bot.version channel_types = Counter(type(c) for c in self.bot.get_all_channels()) voice = channel_types[discord.channel.VoiceChannel] text = channel_types[discord.channel.TextChannel] te = len([c for c in set(self.bot.walk_commands()) if c.cog_name == "Owner"]) se = len([c for c in set(self.bot.walk_commands()) if c.cog_name == "Staff"]) xd = len([c for c in set(self.bot.walk_commands())]) if await ctx.bot.is_owner(ctx.author): ts = 0 elif await ctx.bot.is_admin(ctx.author): ts = te elif not await ctx.bot.is_admin(ctx.author): ts = te + se totcmd = xd - ts mems = sum([x.member_count for x in self.bot.guilds]) website = 'https://dredd-bot.xyz/' Moksej = self.bot.get_user(345457928972533773) embed = discord.Embed(color=self.bot.settings['colors']['embed_color']) embed.set_author(name=_("About {0}").format(self.bot.user), icon_url=self.bot.user.avatar_url) embed.description = _(""" Dredd is a bot that will help your server with moderation, provide fun to your members, and much more! The bot is currently running on **V{0}** and is currently maintained. **Developer:** [{1}](https://discord.com/users/345457928972533773) **Library & version:** {2} [enhanced discord.py {3}](https://github.com/iDutchy/discord.py) **Last boot:** {4} **Created:** {5} ({6}) **Links:** • [Support server]({7}) • [Bot invite]({8}) • [Website]({17}) **Latest Changes:** {9} **Total:** • Commands: **{10}** • Members: **{11}** • Servers: **{12}** • Channels: {13} **{14}** | {15} **{16}**\n """).format(version, escape_markdown(str(Moksej), as_needed=False), self.bot.settings['emojis']['misc']['python'], discord.__version__, btime.human_timedelta(self.bot.uptime), default.date(self.bot.user.created_at), default.timeago(datetime.utcnow() - self.bot.user.created_at.replace(tzinfo=None)), self.bot.support, self.bot.invite, self.get_last_commits(), f'{totcmd:,}', f'{mems:,}', f'{len(self.bot.guilds):,}', self.bot.settings['emojis']['logs']['unlock'], f'{text:,}', self.bot.settings['emojis']['logs']['vcunlock'], f'{voice:,}', website) embed.set_image( url=self.bot.settings['banners']['default']) await ctx.send(embed=embed)
async def userinfo(self, ctx, *, user: discord.Member = None): """ See a user's info """ if not user: user = ctx.author if str(user.status) == 'dnd': status = 'Do Not Disturb' else: status = user.status uroles = [] for role in user.roles: if role.is_default(): continue uroles.append(role.mention) uroles.reverse() if len(uroles) > 10: uroles = [f"{', '.join(uroles[:10])} (+{len(user.roles) - 11})"] e = discord.Embed(color=user.colour) e.set_author(name=user.display_name, icon_url=user.avatar_url) e.set_thumbnail(url=user.avatar_url) e.description = _(""" **Username:** {0} **User ID:** {1} **Created on {2}** **Joined on {3}** **Flag value:** {4} **Status:** {5} """).format(user, user.id, default.date(user.created_at), default.date(user.joined_at), user.public_flags.value, status) if len(uroles) > 0: e.add_field( name=_("__**Roles ({0})**__").format(len(user.roles) - 1), value=", ".join(uroles), inline=False) await ctx.send(embed=e)
async def on_member_unban(self, guild, user): await asyncio.sleep(2) db_check1 = cm.get_cache(self.bot, guild.id, 'moderation') #logchannel = await self.bot.db.fetchval("SELECT channel_id FROM moderation WHERE guild_id = $1", guild.id) case = cm.get_cache(self.bot, guild.id, 'case_num') channel = self.bot.get_channel(db_check1) if db_check1 is None: return deleted = "" reason = "" try: if guild.me.guild_permissions.view_audit_log: async for entry in guild.audit_logs( action=discord.AuditLogAction.unban, limit=50): if entry.target == user: if (datetime.utcnow() - entry.created_at).total_seconds() < 10: deleted += f"{entry.user} ({entry.user.id})" reason += f"{entry.reason}" except Exception as e: print(e) pass casenum = case or 1 embed = discord.Embed( color=self.color['logging_color'], description=f"{emotes.log_unban} Member unbanned! `[#{casenum}]`", timestamp=datetime.utcnow()) embed.add_field(name="User name", value=f'{user} ({user.id})', inline=False) embed.add_field(name="Member created at:", value=default.date(user.created_at), inline=False) if deleted: embed.add_field(name="Moderator", value=deleted, inline=False) if reason: embed.add_field(name="Reason:", value=reason, inline=False) embed.set_thumbnail(url=user.avatar_url) await self.update_query(guildid=guild.id, case=casenum) self.bot.case_num[guild.id] += 1 try: await channel.send(embed=embed) except Exception as e: await self.event_error(error=e, event='on_member_unban', guild=guild) return
async def user(self, ctx, *, user: discord.Member = None): """ Get user information """ fuckmenigga = ctx.message.author if discord.utils.get(fuckmenigga.roles, name="Muted") != None: return if user is None: user = ctx.author embed = discord.Embed(colour=user.top_role.colour.value) embed.set_thumbnail(url=user.avatar_url) embed.add_field(name="Full name", value=user, inline=True) embed.add_field(name="Nickname", value=user.nick if hasattr(user, "nick") else "None", inline=True) embed.add_field(name="Account created", value=default.date(user.created_at), inline=True) embed.add_field(name="Joined this server", value=default.date(user.joined_at), inline=True) embed.add_field( name="Roles", value=', '.join([f"<@&{x.id}>" for x in user.roles if x is not ctx.guild.default_role]) if len(user.roles) > 1 else 'None', inline=False ) await ctx.send(content=f"ℹ About **{user.id}**", embed=embed)
async def info(self, ctx, emote: discord.Emoji): """ Get info about an emote """ e = discord.Embed(color=discord.Color.dark_teal()) e.set_author(name=emote.name, icon_url=emote.guild.icon_url) e.description = _(""" **Created on {0}** **From** {1} (`{2}`) **Emote ID:** `{3}` **Emote URL:** [Click here]({4}) **Escaped:** \{5} """).format(default.date(emote.created_at), emote.guild, emote.guild_id, emote.id, emote.url, emote) e.set_thumbnail(url=emote.url) await ctx.send(embed=e)
async def server(self, ctx): """ Check info about current server """ fuckmenigga = ctx.message.author if discord.utils.get(fuckmenigga.roles, name="Muted") != None: return if ctx.invoked_subcommand is None: findbots = sum(1 for member in ctx.guild.members if member.bot) embed = discord.Embed() embed.set_thumbnail(url=ctx.guild.icon_url) embed.add_field(name="Server Name", value=ctx.guild.name, inline=True) embed.add_field(name="Server ID", value=ctx.guild.id, inline=True) embed.add_field(name="Members", value=ctx.guild.member_count, inline=True) embed.add_field(name="Bots", value=findbots, inline=True) embed.add_field(name="Owner", value=ctx.guild.owner, inline=True) embed.add_field(name="Region", value=ctx.guild.region, inline=True) embed.add_field(name="Created", value=default.date(ctx.guild.created_at), inline=True) await ctx.send(content=f"ℹ information about **{ctx.guild.name}**", embed=embed)
async def roleinfo(self, ctx, *, role: discord.Role): """ See a role's info """ managed = _("Yes") if role.managed else _("No") hoisted = _("Yes") if role.hoist else _("No") position = len(ctx.guild.roles) - role.position permissions = dict(role.permissions) perms = [] for perm in permissions.keys(): if permissions[ perm] is True and not role.permissions.administrator: # I guess role.permissions.administrator works, not sure perms.append(perm.lower().replace('_', ' ').title()) if role.permissions.administrator: perms.append("Administrator") rolemembers = [] for member in role.members: rolemembers.append(member.mention) if len(rolemembers) > 10: rolemembers = [ f"{', '.join(rolemembers[:10])} (+{len(role.members) - 11})" ] e = discord.Embed(color=role.color) e.description = _(""" **ID:** {0} **Created at:** {1} **Managed:** {2} **Position:** {3} **Hoisted:** {4} **Color:** `{5}` **Permissions:** `{6}` **Members ({7}):** {8} """).format(role.id, default.date(role.created_at), managed, position, hoisted, role.colour, "`, `".join(perms), len(role.members), ", ".join(rolemembers)) await ctx.send(_("Information about role **{0}**").format(role.name), embed=e)
async def server(self, ctx): """ Check info about current server """ if ctx.invoked_subcommand is None: rowcheck = await self.getserverstuff(ctx) findbots = sum(1 for member in ctx.guild.members if member.bot) emojilist = "" for Emoji in ctx.guild.emojis: emojilist += f"{Emoji} " if len(emojilist) > 1024: emojilist = "Too long!" if rowcheck["embeds"] == 0 or not permissions.can_embed(ctx): return await ctx.send( f"```\nServer Name: {ctx.guild.name}\nServer ID: {ctx.guild.id}\nMembers: {ctx.guild.member_count}\nBots: {findbots}\nOwner: {ctx.guild.owner}\nRegion: {ctx.guild.region}\nCreated At: {default.date(ctx.guild.created_at)}\n```\nEmojis: {emojilist}" ) embed = discord.Embed(colour=249_742) embed.set_thumbnail(url=ctx.guild.icon_url) embed.add_field(name="Server Name", value=ctx.guild.name, inline=True) embed.add_field(name="Server ID", value=ctx.guild.id, inline=True) embed.add_field(name="Members", value=ctx.guild.member_count, inline=True) embed.add_field(name="Bots", value=findbots, inline=True) embed.add_field(name="Owner", value=ctx.guild.owner, inline=True) embed.add_field(name="Region", value=ctx.guild.region, inline=True) embed.add_field(name="Emojis", value=emojilist, inline=False) embed.add_field(name="Created", value=default.date(ctx.guild.created_at), inline=False) await ctx.send(content=f"ℹ information about **{ctx.guild.name}**", embed=embed)
async def user(self, ctx, user: discord.Member = None): """ Get user information """ rowcheck = await self.getserverstuff(ctx) if user is None: user = ctx.author embed = discord.Embed(colour=249_742) usrstatus = user.status if usrstatus == "online" or usrstatus == discord.Status.online: usrstatus = "<:online:514203909363859459> Online" elif usrstatus == "idle" or usrstatus == discord.Status.idle: usrstatus = "<:away:514203859057639444> Away" elif usrstatus == "dnd" or usrstatus == discord.Status.dnd: usrstatus = "<:dnd:514203823888138240> DnD" elif usrstatus == "offline" or usrstatus == discord.Status.offline: usrstatus = "<:offline:514203770452836359> Offline" else: usrstatus = "Broken" if user.nick: nick = user.nick else: nick = "No Nickname" if user.activity: usrgame = f"{user.activity.name}" else: usrgame = "No current game" usrroles = "" for Role in user.roles: if "@everyone" in Role.name: usrroles += "| @everyone | " else: usrroles += f"{Role.name} | " if len(usrroles) > 1024: usrroles = "Too many to count!" if rowcheck["embeds"] == 0 or not permissions.can_embed(ctx): return await ctx.send( f"Name: `{user.name}#{user.discriminator}`\nNick: `{nick}`\nUID: `{user.id}`\nStatus: {usrstatus}\nGame: `{usrgame}`\nIs a bot? `{user.bot}`\nCreated On: `{default.date(user.created_at)}`\nRoles:\n```\n{usrroles}\n```" ) embed.set_thumbnail(url=user.avatar_url) embed.add_field( name="Name", value=f"{user.name}#{user.discriminator}\n{nick}\n({user.id})", inline=True, ) embed.add_field(name="Status", value=usrstatus, inline=True) embed.add_field(name="Game", value=usrgame, inline=True) embed.add_field(name="Is bot?", value=user.bot, inline=True) embed.add_field(name="Roles", value=usrroles, inline=False) embed.add_field(name="Created On", value=default.date(user.created_at), inline=True) if hasattr(user, "joined_at"): embed.add_field( name="Joined this server", value=default.date(user.joined_at), inline=True, ) await ctx.send(content=f"ℹ About **{user.name}**", embed=embed)
async def on_member_join(self, member): #print(f'{member} has joined a server ({member.guild}).') # ! Join role (Role on join) db_check1 = await self.bot.db.fetchval( "SELECT guild_id FROM joinrole WHERE guild_id = $1", member.guild.id) peoplerole = await self.bot.db.fetchval( "SELECT role_id FROM joinrole WHERE guild_id = $1", member.guild.id) botrole = await self.bot.db.fetchval( "SELECT bots FROM joinrole WHERE guild_id = $1", member.guild.id) # ! Join log (Member join log) db_check2 = await self.bot.db.fetchval( "SELECT guild_id FROM joinlog WHERE guild_id = $1", member.guild.id) joinlog = await self.bot.db.fetchval( "SELECT channel_id FROM joinlog WHERE guild_id = $1", member.guild.id) # ! Join message (Welcome msg) db_check3 = await self.bot.db.fetchval( "SELECT guild_id FROM joinmsg WHERE guild_id = $1", member.guild.id) joinmsg = await self.bot.db.fetchval( "SELECT channel_id FROM joinmsg WHERE guild_id = $1", member.guild.id) message = await self.bot.db.fetchval( "SELECT msg FROM joinmsg WHERE guild_id = $1", member.guild.id) bots = await self.bot.db.fetchval( "SELECT bot_join FROM joinmsg WHERE guild_id = $1", member.guild.id) # ! Temp mute temp_mute = await self.bot.db.fetchval( "SELECT user_id FROM moddata WHERE user_id = $1 AND guild_id = $2", member.id, member.guild.id) with open('db/badges.json', 'r') as f: data = json.load(f) try: badges = data['Users'][f"{member.id}"]['Badges'] except KeyError: badges = '' pass except Exception as e: badges = '' print(e) pass if db_check1 is not None: if member.guild.me.guild_permissions.manage_roles: # Role on join if member.bot and botrole is not None: role = member.guild.get_role(botrole) try: await member.add_roles(role, reason='Autorole') except Exception as e: await self.event_error( error=e, event='on_member_join (bot role)', guild=before.guild) return elif not member.bot and peoplerole is not None: role = member.guild.get_role(peoplerole) try: await member.add_roles(role, reason='Autorole') except Exception as e: await self.event_error( error=e, event='on_member_join (people role)', guild=before.guild) return if temp_mute: muterole = discord.utils.find( lambda r: r.name.lower() == "muted", member.guild.roles) if muterole: try: await member.add_roles( muterole, reason='User was muted before') except Exception as e: await self.event_error( error=e, event='on_member_join (anti evading mute)', guild=member.guild) return else: return if db_check3 is not None: if member.bot and bots == False: return elif member.bot and bots == True: pass elif bots is None: pass if message: joinmessage = str(message) joinmessage = joinmessage.replace("::member.mention::", member.mention) joinmessage = joinmessage.replace("::member.name::", member.name) joinmessage = joinmessage.replace("::server.name::", member.guild.name) joinmessage = joinmessage.replace( "::server.members::", str(member.guild.member_count)) elif message is None: joinmessage = f"{emotes.joined} {member.mention} joined the server! There are {member.guild.member_count} members in the server now." # Welcome msg welcomechannel = self.bot.get_channel(joinmsg) try: await welcomechannel.send( joinmessage, allowed_mentions=discord.AllowedMentions(users=True)) except Exception as e: await self.event_error( error=e, event='on_member_join (welcome message)', guild=member.guild) return if db_check2 is not None: # Member join log logchannel = self.bot.get_channel(joinlog) embed = discord.Embed( color=self.bot.logging_color, description=f"{emotes.log_memberjoin} New member joined", timestamp=datetime.utcnow()) #embed.set_author(icon_url=member.avatar_url) embed.add_field(name="Username:"******"User ID:", value=member.id, inline=True) embed.add_field(name="Created at:", value=default.date(member.created_at), inline=False) embed.set_thumbnail(url=member.avatar_url) if member.guild.id == 671078170874740756 and badges: embed.add_field(name='User badges', value=', '.join(badges), inline=False) try: await logchannel.send(embed=embed) except Exception as e: await self.event_error( error=e, event='on_member_join (welcome log message)', guild=member.guild) return
async def on_member_remove(self, member): await self.bot.db.execute( "DELETE FROM warnings WHERE user_id = $1 AND guild_id = $2", member.id, member.guild.id) await self.bot.db.execute( "DELETE FROM autowarns WHERE user_id = $1 AND guild_id = $2", member.id, member.guild.id) shared_server = len([ x for x in self.bot.guilds if x.id != member.guild.id and x.get_member(member.id) ]) if shared_server == 0: await self.bot.db.execute( "DELETE FROM useractivity WHERE user_id = $1", member.id) db_check1 = cm.get_cache(self.bot, member.guild.id, 'leavemsg') db_check2 = cm.get_cache(self.bot, member.guild.id, 'joinlog') moderation = cm.get_cache(self.bot, member.guild.id, 'moderation') case = cm.get_cache(self.bot, member.guild.id, 'case_num') if member == self.bot.user: return if member.guild.me.guild_permissions.view_audit_log: checks = await self.get_audit_logs( member.guild, limit=1, action=discord.AuditLogAction.kick) if db_check2 is not None: # Member leave log logchannel = self.bot.get_channel(db_check2) embed = discord.Embed( color=self.color['logging_color'], description=f"{emotes.log_memberleave} Member left", timestamp=datetime.utcnow()) #embed.set_author(icon_url=member.avatar_url) embed.add_field(name="Username:"******"{member} ({member.id})", inline=True) embed.add_field(name="Created at:", value=default.date(member.created_at), inline=False) embed.add_field(name="Joined at:", value=default.date(member.joined_at), inline=False) embed.set_thumbnail(url=member.avatar_url) try: await logchannel.send(embed=embed) except Exception as e: await self.event_error( error=e, event='on_member_remove (leave log message)', guild=member.guild) pass if moderation is not None: try: deleted = "" reason = "" async for entry in member.guild.audit_logs( limit=1, action=discord.AuditLogAction.kick): if entry.target == member: deleted += f"{entry.user} ({entry.user.id})" reason += f"{entry.reason}" #print(entry) except Exception as e: print(e) pass logchannel = self.bot.get_channel(moderation) if deleted and (datetime.utcnow() - checks[0].created_at).total_seconds() < 5: casenum = cm.get_cache(self.bot, member.guild.id, 'case_num') or 1 embed = discord.Embed( color=self.color['logging_color'], description= f"{emotes.log_memberleave} Member kicked `[#{casenum}]`", timestamp=datetime.utcnow()) #embed.set_author(icon_url=member.avatar_url) embed.add_field(name="Username:"******"{member} ({member.id})", inline=False) embed.add_field(name="Created at:", value=default.date(member.created_at), inline=False) embed.add_field(name="Joined at:", value=default.date(member.joined_at), inline=False) if deleted: embed.add_field(name='Moderator:', value=deleted, inline=False) if reason: embed.add_field(name="Reason:", value=reason, inline=False) embed.set_thumbnail(url=member.avatar_url) await self.update_query(guildid=member.guild.id, case=casenum) self.bot.case_num[member.guild.id] += 1 try: await logchannel.send(embed=embed) except Exception as e: await self.event_error( error=e, event='on_member_remove (kick message)', guild=member.guild) pass elif deleted and (datetime.utcnow() - checks[0].created_at).total_seconds() > 5: pass if db_check1 is not None: if member.bot and db_check1['bot_joins'] == False: return elif member.bot and db_check1['bot_joins'] == True: pass elif db_check1['bot_joins'] is None: pass if db_check1['message'] and not db_check1['embed']: leavemessage = str(db_check1['message']) leavemessage = leavemessage.replace("{{member.mention}}", member.mention) leavemessage = leavemessage.replace("{{member.tag}}", str(member)) leavemessage = leavemessage.replace("{{member.id}}", str(member.id)) leavemessage = leavemessage.replace( "{{member.name}}", discord.utils.escape_markdown(member.name, as_needed=True)) leavemessage = leavemessage.replace("{{server.name}}", member.guild.name) leavemessage = leavemessage.replace( "{{server.members}}", str(member.guild.member_count)) elif db_check1['message'] is None and not db_check1['embed']: leavemessage = f"{emotes.left} {member.mention} left the server... There are {member.guild.member_count} members left in the server." elif db_check1['message'] and db_check1['embed'] == True: msg = json.loads(db_check1['message']) emb_dict = msg emb_dict = self.placeholder_replacer(emb_dict, member) if "author" in emb_dict: emb_dict["author"] = self.placeholder_replacer( emb_dict["author"], member) if "footer" in emb_dict: emb_dict["footer"] = self.placeholder_replacer( emb_dict["footer"], member) if "fields" in emb_dict: for field in emb_dict["fields"]: emb_dict["fields"] = self.placeholder_replacer( field["name"], member) emb_dict["fields"] = self.placeholder_replacer( field["value"], member) elif db_check1['message'] is None and db_check1['embed'] == True: emb_dict = { "description": "{{member.name}} left the server! There are now {{server.members}} members left!", "color": 13579316 } emb_dict = self.placeholder_replacer(emb_dict, member) if "author" in emb_dict: emb_dict["author"] = self.placeholder_replacer( emb_dict["author"], member) if "footer" in emb_dict: emb_dict["footer"] = self.placeholder_replacer( emb_dict["footer"], member) if "fields" in emb_dict: for field in emb_dict["fields"]: emb_dict["fields"] = self.placeholder_replacer( field["name"], member) emb_dict["fields"] = self.placeholder_replacer( field["value"], member) leavechannel = self.bot.get_channel(db_check1['channel']) try: if db_check1['embed']: try: await leavechannel.send( content=emb_dict['plainText'], embed=discord.Embed.from_dict(emb_dict), allowed_mentions=discord.AllowedMentions( users=True)) except: await leavechannel.send( embed=discord.Embed.from_dict(emb_dict), allowed_mentions=discord.AllowedMentions( users=True)) else: await leavechannel.send( leavemessage, allowed_mentions=discord.AllowedMentions(users=True)) except Exception as e: await self.event_error( error=e, event='on_member_remove (leave message)', guild=member.guild) return
async def on_member_join(self, member): #print(f'{member} has joined a server ({member.guild}).') # ! Join role (Role on join) db_check1 = cm.get_cache(self.bot, member.guild.id, 'joinrole') # ! Join log (Member join log) db_check2 = cm.get_cache(self.bot, member.guild.id, 'joinlog') # ! Join message (Welcome msg) db_check3 = cm.get_cache(self.bot, member.guild.id, 'joinmsg') # ! Temp mute temp_mute = await self.bot.db.fetchval( "SELECT user_id FROM moddata WHERE user_id = $1 AND guild_id = $2", member.id, member.guild.id) badges = cm.get_cache(self.bot, f"{member.id}", 'user_badges') if db_check1 is not None: if member.guild.me.guild_permissions.manage_roles: # Role on join if member.bot and db_check1['bots'] is not None: role = member.guild.get_role(db_check1['bots']) try: await member.add_roles(role, reason='Autorole') except Exception as e: await self.event_error( error=e, event='on_member_join (bot role)', guild=member.guild) pass elif not member.bot and db_check1['people'] is not None: role = member.guild.get_role(db_check1['people']) try: await member.add_roles(role, reason='Autorole') except Exception as e: await self.event_error( error=e, event='on_member_join (people role)', guild=member.guild) pass if temp_mute: muterole = discord.utils.find( lambda r: r.name.lower() == "muted", member.guild.roles) if muterole: try: await member.add_roles( muterole, reason='User was muted before') except Exception as e: await self.event_error( error=e, event='on_member_join (anti evading mute)', guild=member.guild) pass else: pass if db_check2 is not None: # Member join log logchannel = self.bot.get_channel(db_check2) embed = discord.Embed( color=self.color['logging_color'], description=f"{emotes.log_memberjoin} New member joined", timestamp=datetime.utcnow()) #embed.set_author(icon_url=member.avatar_url) embed.add_field(name="Username:"******"User ID:", value=member.id, inline=True) embed.add_field(name="Created at:", value=default.date(member.created_at), inline=False) embed.set_thumbnail(url=member.avatar_url) if member.guild.id == 671078170874740756 and badges: embed.add_field(name='User badges', value=', '.join(badges), inline=False) try: await logchannel.send(embed=embed) except Exception as e: await self.event_error( error=e, event='on_member_join (welcome log message)', guild=member.guild) pass if db_check3 is not None: if member.bot and db_check3['bot_joins'] == False: return elif member.bot and db_check3['bot_joins'] == True: pass elif db_check3['bot_joins'] is None: pass if db_check3['message'] and not db_check3['embed']: joinmessage = str(db_check3['message']) joinmessage = joinmessage.replace("{{member.mention}}", member.mention) joinmessage = joinmessage.replace("{{member.tag}}", str(member)) joinmessage = joinmessage.replace("{{member.id}}", str(member.id)) joinmessage = joinmessage.replace( "{{member.name}}", discord.utils.escape_markdown(member.name, as_needed=True)) joinmessage = joinmessage.replace("{{server.name}}", member.guild.name) joinmessage = joinmessage.replace( "{{server.members}}", str(member.guild.member_count)) elif db_check3['message'] is None and not db_check3['embed']: joinmessage = f"{emotes.joined} {member.mention} joined the server! There are {member.guild.member_count} members in the server now." elif db_check3['message'] and db_check3['embed'] == True: msg = json.loads(db_check3['message']) emb_dict = msg emb_dict = self.placeholder_replacer(emb_dict, member) if "author" in emb_dict: emb_dict["author"] = self.placeholder_replacer( emb_dict["author"], member) if "footer" in emb_dict: emb_dict["footer"] = self.placeholder_replacer( emb_dict["footer"], member) if "fields" in emb_dict: for field in emb_dict["fields"]: emb_dict["fields"] = self.placeholder_replacer( field["name"], member) emb_dict["fields"] = self.placeholder_replacer( field["value"], member) elif db_check3['message'] is None and db_check3['embed'] == True: emb_dict = { "plainText": "{{member.mention}}", "title": "Welcome to {{server.name}}", "description": "You are member #{{server.members}} in this server!", "color": 6215030 } emb_dict = self.placeholder_replacer(emb_dict, member) if "author" in emb_dict: emb_dict["author"] = self.placeholder_replacer( emb_dict["author"], member) if "footer" in emb_dict: emb_dict["footer"] = self.placeholder_replacer( emb_dict["footer"], member) if "fields" in emb_dict: for field in emb_dict["fields"]: emb_dict["fields"] = self.placeholder_replacer( field["name"], member) emb_dict["fields"] = self.placeholder_replacer( field["value"], member) # Welcome msg welcomechannel = self.bot.get_channel(db_check3['channel']) try: if db_check3['embed']: try: await welcomechannel.send( content=emb_dict['plainText'], embed=discord.Embed.from_dict(emb_dict), allowed_mentions=discord.AllowedMentions( users=True)) except: await welcomechannel.send( embed=discord.Embed.from_dict(emb_dict), allowed_mentions=discord.AllowedMentions( users=True)) else: await welcomechannel.send( joinmessage, allowed_mentions=discord.AllowedMentions(users=True)) except Exception as e: await self.event_error( error=e, event='on_member_join (welcome message)', guild=member.guild) pass
async def serverinfo(self, ctx): """ Check info about current server """ if ctx.invoked_subcommand is None: findbots = sum(1 for member in ctx.guild.members if member.bot) roles = "" for role in ctx.guild.roles: if not role.name == "@everyone": roles += role.mention + ", " embed = discord.Embed(color=self.bot.embed_color) if ctx.guild.icon_url: embed.set_thumbnail(url=ctx.guild.icon_url) else: embed.set_thumbnail(url="https://cdn.discordapp.com/embed/avatars/0.png") embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_name'), value=ctx.guild.name, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_id'), value=ctx.guild.id, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_members'), value=f"{sum(1 for member in ctx.guild.members if not member.bot)} (+{sum(1 for member in ctx.guild.members if member.bot)} {get_text(ctx.guild, 'info', 'info.server_bots')})", inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_owner'), value=ctx.guild.owner, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_region'), value=ctx.guild.region, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.created'), value=default.date(ctx.guild.created_at), inline=True) info = [] features = set(ctx.guild.features) all_features = { 'PARTNERED': get_text(ctx.guild, 'info', 'info.features.partnered'), 'VERIFIED': get_text(ctx.guild, 'info', 'info.features.verified'), 'INVITE_SPLASH': get_text(ctx.guild, 'info', 'info.features.splash'), 'VANITY_URL': get_text(ctx.guild, 'info', 'info.features.vanity'), 'MORE_EMOJI': get_text(ctx.guild, 'info', 'info.features.emoji'), 'ANIMATED_ICON': get_text(ctx.guild, 'info', 'info.features.animated'), 'BANNER': get_text(ctx.guild, 'info', 'info.features.banner') } for feature, label in all_features.items(): if feature in features: info.append(label) if info: embed.add_field(name=get_text(ctx.guild, 'info', 'info.features'), value=',\n'.join(info)) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_verification'), value=str(ctx.guild.verification_level).capitalize()) def next_level_calc(ctx): if str(ctx.guild.premium_tier) == "0": count = int(2 - ctx.guild.premium_subscription_count) txt = get_text(ctx.guild, 'info', 'info.next_level_in').format(count) return txt if str(ctx.guild.premium_tier) == "1": count = int(15 - ctx.guild.premium_subscription_count) txt = get_text(ctx.guild, 'info', 'info.next_level_in').format(count) return txt if str(ctx.guild.premium_tier) == "2": count = int(30 - ctx.guild.premium_subscription_count) txt = get_text(ctx.guild, 'info', 'info.next_level_in').format(count) return txt if str(ctx.guild.premium_tier) == "3": txt = get_text(ctx.guild, 'info', 'info.max_level') return txt boostmsg = f"{get_text(ctx.guild, 'info', 'info.boost_count').format(ctx.guild.premium_subscription_count)}" boostmsg += "\n{0}".format(next_level_calc(ctx)) last_boost = max(ctx.guild.members, key=lambda m: m.premium_since or ctx.guild.created_at) if last_boost.premium_since is not None: boosts = f"{get_text(ctx.guild, 'info', 'info.last_boost')} {last_boost} ({humanize.naturaltime(last_boost.premium_since)})" boostmsg += f"\n{boosts}" boostmsg += "\n\n0Рађ" + make_pb(30, 2, (ctx.guild.premium_subscription_count if ctx.guild.premium_subscription_count <= 30 else 30)) + "Рађ30" embed.add_field(name=get_text(ctx.guild, 'info', 'info.boosts'), value=boostmsg, inline=False) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_roles').format(int(len(ctx.guild.roles) -1)), value=roles[:-2]) await ctx.send(content=f"<:info:603362826358095922> {get_text(ctx.guild, 'info', 'info.info_about').format(ctx.guild.name)}", embed=embed)
async def serverinfo(self, ctx): """ Overview about the information of a server """ if not ctx.guild.chunked: await ctx.guild.chunk(cache=True) acks = default.server_badges(ctx, ctx.guild) ack = _("\n**Acknowledgements:** {0}").format(acks) if acks else '' unique_members = set(ctx.guild.members) unique_online = sum(1 for m in unique_members if m.status is discord.Status.online and not type(m.activity) == discord.Streaming) unique_offline = sum(1 for m in unique_members if m.status is discord.Status.offline and not type(m.activity) == discord.Streaming) unique_idle = sum(1 for m in unique_members if m.status is discord.Status.idle and not type(m.activity) == discord.Streaming) unique_dnd = sum(1 for m in unique_members if m.status is discord.Status.dnd and not type(m.activity) == discord.Streaming) unique_streaming = sum(1 for m in unique_members if type(m.activity) == discord.Streaming) humann = sum(1 for member in ctx.guild.members if not member.bot) botts = sum(1 for member in ctx.guild.members if member.bot) num = 0 for user in ctx.guild.members: if ctx.channel.permissions_for(user).kick_members or \ ctx.channel.permissions_for(user).ban_members: if not user.bot: num += 1 bans = '' if ctx.channel.permissions_for(ctx.guild.me).ban_members: bans += _("\n**Banned:** {0}").format( f'{len(await ctx.guild.bans()):,}') nitromsg = _("This server has **{0}** boosts").format( ctx.guild.premium_subscription_count) nitromsg += _("\n{0}").format(default.next_level(ctx)) region = default.region_flags(ctx) e = discord.Embed(color=self.bot.settings['colors']['embed_color']) e.set_author(name=_("{0} Information").format(ctx.guild.name), icon_url=ctx.guild.icon_url) e.add_field(name=_('General Information:'), value=_(""" **Name:** {0} **ID:** {1} **Guild created:** {2} ({3}) **Region:** {4} **Verification level:** {5} **Owner:** {6} **Owner ID:** {7}{8} **Nitro status:** {9} """).format( ctx.guild.name, ctx.guild.id, default.date(ctx.guild.created_at), btime.human_timedelta( ctx.guild.created_at.replace(tzinfo=None), source=datetime.utcnow()), region, str(ctx.guild.verification_level).capitalize(), ctx.guild.owner or 'Unknown', ctx.guild.owner.id, ack, nitromsg)) members_info = ( f"{self.bot.settings['emojis']['misc']['pc-online']} {unique_online:,}\n" f"{self.bot.settings['emojis']['misc']['pc-idle']} {unique_idle:,}\n" f"{self.bot.settings['emojis']['misc']['pc-dnd']} {unique_dnd:,}\n" f"{self.bot.settings['emojis']['misc']['offline']} {unique_offline:,}\n" f"{self.bot.settings['emojis']['misc']['streaming']} {unique_streaming:,}" ) e.add_field(name=_('Other Information:'), value=_("""**Members:** (Total: {0}) {1} **Bots:** {2} | **Humans:** {3} **Staff:** {4}{5} **Channels:** {6} {7} | {8} {9} """).format(f'{ctx.guild.member_count:,}', members_info, f'{botts:,}', f'{humann:,}', f'{num:,}', bans, self.bot.settings['emojis']['logs']['unlock'], f'{len(ctx.guild.text_channels):,}', self.bot.settings['emojis']['logs']['vcunlock'], f'{len(ctx.guild.voice_channels):,}')) info = [] features = set(ctx.guild.features) all_features = { 'PARTNERED': 'Partnered', 'VERIFIED': 'Verified', 'DISCOVERABLE': 'Server Discovery', 'COMMUNITY': 'Community server', 'INVITE_SPLASH': 'Invite Splash', 'VIP_REGIONS': 'VIP Voice Servers', 'VANITY_URL': 'Vanity Invite', 'MORE_EMOJI': 'More Emoji', 'COMMERCE': 'Commerce', 'LURKABLE': 'Lurkable', 'NEWS': 'News Channels', 'ANIMATED_ICON': 'Animated Icon', 'BANNER': 'Banner', 'WELCOME_SCREEN_ENABLED': "Welcome screen" } for feature, label in all_features.items(): if feature in features: info.append(label) if info: e.add_field(name=_("Features"), value=', '.join(info), inline=False) if not ctx.guild.is_icon_animated(): e.set_thumbnail(url=ctx.guild.icon_url_as(format="png")) elif ctx.guild.is_icon_animated(): e.set_thumbnail(url=ctx.guild.icon_url_as(format="gif")) if ctx.guild.banner: e.set_image(url=ctx.guild.banner_url_as(format="png")) await ctx.send(embed=e)
async def userinfo(self, ctx, *, user: typing.Union[discord.User, str] = None): """ Overview about the information of an user """ embcolor = self.bot.settings['colors']['embed_color'] user = await default.find_user(ctx, user) if not user: return await ctx.send( _("{0} | That user could not be found.").format( ctx.bot.settings['emojis']['misc']['warn'])) if not self.bot.get_user(user.id): embcolor = ctx.bot.settings['colors']['fetch_color'] discord_badges = await default.public_flags(ctx, user) if user.bot and not discord_badges: discord_badges = f"{self.bot.settings['emojis']['badges']['bot']}" e = discord.Embed(color=embcolor) e.set_author(name=_("{0}'s Information").format(user), icon_url=user.avatar_url) member = ctx.guild.get_member(user.id) if member: nick = member.nick or 'N/A' nicks = '' status = default.member_status(ctx, member) act = default.member_activity(ctx, member) uroles = [] for role in member.roles: if role.is_default(): continue uroles.append(role.mention) uroles.reverse() if len(uroles) > 15: uroles = [ f"{', '.join(uroles[:10])} (+{len(member.roles) - 11})" ] if not member.bot: if CM.get(self.bot, 'nicks_op', member.id) is None: nicks += _('\n**Latest nicknames:** ') nicknames = await self.bot.db.fetch( "SELECT * FROM nicknames WHERE user_id = $1 AND guild_id = $2 ORDER BY time DESC LIMIT 5", user.id, ctx.guild.id) if nicknames: for nickk in nicknames: nicks += f"{escape_markdown(nickk['nickname'], as_needed=False)}, " if not nicknames: nicks += 'N/A ' user_roles = _(' **({0} Total)**').format( len(member.roles) - 1) if uroles != [] else _('No roles') e.add_field(name=_("General Information:"), value=_(""" {0} {1} {2} {3} **User ID:** {4} **Account created:** {5} ({6})""").format( status, user, discord_badges, act, user.id, user.created_at.__format__('%A %d %B %Y, %H:%M'), btime.human_timedelta( user.created_at.replace(tzinfo=None), source=datetime.utcnow())), inline=False) e.add_field(name=_("Server Information:"), value=_(""" **Nickname:** {0}{1} **Joined at:** {2} ({3}) **Roles:** {4}""").format( nick, nicks[:-2], default.date(member.joined_at), btime.human_timedelta( member.joined_at.replace(tzinfo=None), source=datetime.utcnow()), ', '.join(uroles) + user_roles)) else: guilds = [x for x in self.bot.guilds if x.get_member(user.id)] try: member = guilds[0].get_member(user.id) status = default.member_status(ctx, member) act = default.member_activity(ctx, member) except Exception: status = '' act = '' e.add_field(name=_("General Information:"), value=_(""" {0} {1} {2} {3} **User ID:** {4} **Account created:** {5} ({6})""").format( status, user, discord_badges, act, user.id, user.created_at.__format__('%A %d %B %Y, %H:%M'), btime.human_timedelta( user.created_at.replace(tzinfo=None), source=datetime.utcnow())), inline=False) if await self.bot.is_booster(user): media = await default.medias(ctx, user) if media: e.add_field(name=_('Social media:'), value=media, inline=False) if not user.is_avatar_animated(): e.set_thumbnail(url=user.avatar_url_as(format='png')) elif user.is_avatar_animated(): e.set_thumbnail(url=user.avatar_url_as(format='gif')) else: e.set_thumbnail(url=user.avatar_url) await ctx.send(embed=e)
async def serverinfo(self, ctx): """ Get information about the server """ owner = await self.bot.fetch_user(ctx.guild.owner_id) member_count = ctx.guild.member_count # last known count because you don't have intents features = ", ".join(ctx.guild.features).lower().replace( '_', ' ').title() if len(ctx.guild.features) != 0 else None mfa = _("Optional") if ctx.guild.mfa_level else _("Required") verification = str(ctx.guild.verification_level).capitalize() e = discord.Embed(color=discord.Color.dark_teal()) e.set_author(name=_("{0} Information").format(ctx.guild.name), icon_url=ctx.guild.icon_url) e.add_field(name=_("**General Information**"), value=_("**Owner:** {0} ({1})\n**Guild Created At:** {2}\n" \ "**MFA:** {3}\n**Verification Level:** {4}").format(owner, owner.id, default.date(ctx.guild.created_at), mfa, verification)) e.add_field(name=_("**Other**"), value=_("**Avg Member Count:** {0:,}\n**Text Channels:** {1}\n" \ "**Voice Channels:** {2}").format(member_count, len(ctx.guild.text_channels), len(ctx.guild.voice_channels))) # if features: e.add_field(name="**Server Features**", value=features, inline=False) if not ctx.guild.is_icon_animated(): e.set_thumbnail(url=ctx.guild.icon_url_as(format="png")) elif ctx.guild.is_icon_animated(): e.set_thumbnail(url=ctx.guild.icon_url_as(format="gif")) if ctx.guild.banner: e.set_image(url=ctx.guild.banner_url_as(format="png")) e.set_footer(text=f"Guild ID: {ctx.guild.id}") await ctx.send(embed=e)
async def serverinfo(self, ctx): """ Check info about current server """ if ctx.invoked_subcommand is None: findbots = sum(1 for member in ctx.guild.members if member.bot) roles = "" for role in ctx.guild.roles: if not role.name == "@everyone": roles += role.mention + ", " embed = discord.Embed(color=self.bot.embed_color) if ctx.guild.icon_url: embed.set_thumbnail(url=ctx.guild.icon_url) else: embed.set_thumbnail(url="https://cdn.discordapp.com/embed/avatars/0.png") embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_name'), value=ctx.guild.name, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_id'), value=ctx.guild.id, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_members'), value=f"{sum(1 for member in ctx.guild.members if not member.bot)} (+{sum(1 for member in ctx.guild.members if member.bot)} {get_text(ctx.guild, 'info', 'info.server_bots')})", inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_owner'), value=ctx.guild.owner, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_region'), value=ctx.guild.region, inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.created'), value=default.date(ctx.guild.created_at), inline=True) embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_verification'), value=str(ctx.guild.verification_level).capitalize()) info = [] features = set(ctx.guild.features) all_features = { 'PARTNERED': get_text(ctx.guild, 'info', 'info.features.partnered'), 'VERIFIED': get_text(ctx.guild, 'info', 'info.features.verified'), 'INVITE_SPLASH': get_text(ctx.guild, 'info', 'info.features.splash'), 'VANITY_URL': get_text(ctx.guild, 'info', 'info.features.vanity'), 'MORE_EMOJI': get_text(ctx.guild, 'info', 'info.features.emoji'), 'ANIMATED_ICON': get_text(ctx.guild, 'info', 'info.features.animated'), 'BANNER': get_text(ctx.guild, 'info', 'info.features.banner') } for feature, label in all_features.items(): if feature in features: info.append(label) if info: embed.add_field(name=get_text(ctx.guild, 'info', 'info.features'), value=',\n'.join(info)) def next_level_calc(ctx): if str(ctx.guild.premium_tier) == "0": count = int(2 - ctx.guild.premium_subscription_count) txt = get_text(ctx.guild, 'info', 'info.next_level_in').format(count) #if ctx.author.is_on_mobile(): return txt #centered = "⠀"*int(25 - len(txt)/2) + txt #return centered if str(ctx.guild.premium_tier) == "1": count = int(10 - ctx.guild.premium_subscription_count) txt = get_text(ctx.guild, 'info', 'info.next_level_in').format(count) #if ctx.author.is_on_mobile(): return txt #centered = "⠀"*int(25 - len(txt)/2) + txt #return centered if str(ctx.guild.premium_tier) == "2": count = int(20 - ctx.guild.premium_subscription_count) txt = get_text(ctx.guild, 'info', 'info.next_level_in').format(count) #if ctx.author.is_on_mobile(): return txt #centered = "⠀"*int(25 - len(txt)/2) + txt #return centered if str(ctx.guild.premium_tier) == "3": txt = get_text(ctx.guild, 'info', 'info.max_level') #if ctx.author.is_on_mobile(): return txt #centered = "⠀"*int(25 - len(txt)/2) + txt #return centered if not ctx.author.is_on_mobile(): if ctx.guild.premium_subscription_count is not None: boostmsg = get_text(ctx.guild, 'info', 'info.boost_count').format('⠀'*int(5), ctx.guild.premium_subscription_count) boostmsg += "\n`{0}{1}`\n".format('\U00002588'*(int(round(ctx.guild.premium_subscription_count))), '⠀'*(20-(int(round(ctx.guild.premium_subscription_count))))) boostmsg += "⠀| ⠀⠀⠀⠀⠀| ⠀⠀⠀⠀⠀⠀⠀⠀|\n" boostmsg += "Lvl 1⠀⠀⠀Lvl 2⠀⠀⠀⠀⠀⠀⠀Lvl 3\n" boostmsg += "{0}".format(next_level_calc(ctx)) last_boost = max(ctx.guild.members, key=lambda m: m.premium_since or ctx.guild.created_at) if last_boost.premium_since is not None: boosts = f"{get_text(ctx.guild, 'info', 'info.last_boost')} {last_boost} ({humanize.naturaltime(last_boost.premium_since)})" #centered = "⠀"*int(27 - len(boosts)/2) + boosts boostmsg += f"\n{boosts}" embed.add_field(name=get_text(ctx.guild, 'info', 'info.boosts'), value=boostmsg) else: embed.add_field(name=get_text(ctx.guild, 'info', 'info.boosts'), value=f"{'⠀'*18} {get_text(ctx.guild, 'info', 'info.no_boosts')} \n`{'⠀'*50}`\n⠀| ⠀⠀⠀⠀⠀| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀|\nLvl 1⠀⠀⠀Lvl 2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀Lvl 3\n{'⠀'*14}Next level in 2 boosts') #.format('⠀'*21, '⠀'*50, '⠀'*14)") else: if ctx.guild.premium_subscription_count is not None: last_boost = max(ctx.guild.members, key=lambda m: m.premium_since or ctx.guild.created_at) boosts = f"{get_text(ctx.guild, 'info', 'info.last_boost')} {last_boost} ({humanize.naturaltime(last_boost.premium_since)})" embed.add_field(name=get_text(ctx.guild, 'info', 'info.boosts'), value=f"{get_text(ctx.guild, 'info', 'info.boosts')}: {ctx.guild.premium_subscription_count}\n" f"{get_text(ctx.guild, 'info', 'info.boost_level')} {ctx.guild.premium_tier}\n" f"{next_level_calc(ctx)}" f"\n{boosts if last_boost.premium_since is not None else ''}") embed.add_field(name=get_text(ctx.guild, 'info', 'info.server_roles').format(int(len(ctx.guild.roles) -1)), value=roles[:-2]) await ctx.send(content=f"<:info:603362826358095922> {get_text(ctx.guild, 'info', 'info.info_about').format(ctx.guild.name)}", embed=embed)