147 lines
4.7 KiB
Python
147 lines
4.7 KiB
Python
import datetime
|
|
|
|
import discord
|
|
from discord.ext import commands
|
|
|
|
from bot import TuxBot
|
|
from .utils.lang import Texts
|
|
|
|
|
|
class Admin(commands.Cog):
|
|
|
|
def __init__(self, bot: TuxBot):
|
|
self.bot = bot
|
|
|
|
async def cog_check(self, ctx: commands.Context):
|
|
permissions: discord.Permissions = ctx.channel.permissions_for(
|
|
ctx.author)
|
|
|
|
has_permission = permissions.administrator
|
|
is_owner = await self.bot.is_owner(ctx.author)
|
|
|
|
return has_permission or is_owner
|
|
|
|
@staticmethod
|
|
async def kick_ban_message(ctx: commands.Context,
|
|
**kwargs) -> discord.Embed:
|
|
member: discord.Member = kwargs.get('member')
|
|
reason = kwargs.get(
|
|
'reason',
|
|
Texts('admin').get("Please enter a reason")
|
|
)
|
|
|
|
if kwargs.get('type') == 'ban':
|
|
title = '**Ban** ' + str(len(await ctx.guild.bans()))
|
|
color = discord.Color.dark_red()
|
|
else:
|
|
title = '**Kick**'
|
|
color = discord.Color.red()
|
|
e = discord.Embed(
|
|
title=title,
|
|
description=reason,
|
|
timestamp=datetime.datetime.utcnow(),
|
|
color=color
|
|
)
|
|
e.set_author(
|
|
name=f'{member.name}#{member.discriminator} ({member.id})',
|
|
icon_url=member.avatar_url_as(format='jpg')
|
|
)
|
|
e.set_footer(
|
|
text=f'{ctx.author.name}#{ctx.author.discriminator}',
|
|
icon_url=ctx.author.avatar_url_as(format='png')
|
|
)
|
|
|
|
return e
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
@commands.command(name='say')
|
|
async def _say(self, ctx: commands.Context, *, to_say: str):
|
|
try:
|
|
await ctx.message.delete()
|
|
await ctx.send(to_say)
|
|
except discord.errors.Forbidden:
|
|
await ctx.send(to_say)
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
@commands.command(name='ban')
|
|
async def _ban(self, ctx: commands.Context, user: discord.User, *,
|
|
reason=""):
|
|
member: discord.Member = await ctx.guild.fetch_member(user.id)
|
|
|
|
if member:
|
|
try:
|
|
await member.ban(reason=reason)
|
|
e: discord.Embed = await self.kick_ban_message(
|
|
ctx,
|
|
member=member,
|
|
type='ban',
|
|
reason=reason
|
|
)
|
|
|
|
await ctx.send(embed=e)
|
|
except discord.Forbidden:
|
|
await ctx.send(Texts('admin').get("Unable to ban this user"))
|
|
else:
|
|
await ctx.send(Texts('admin').get("Unable to find the user..."))
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
@commands.command(name='kick')
|
|
async def _kick(self, ctx: commands.Context, user: discord.User, *,
|
|
reason=""):
|
|
member: discord.Member = await ctx.guild.fetch_member(user.id)
|
|
|
|
if member:
|
|
try:
|
|
await member.kick(reason=reason)
|
|
e: discord.Embed = await self.kick_ban_message(
|
|
ctx,
|
|
member=member,
|
|
type='kick',
|
|
reason=reason
|
|
)
|
|
|
|
await ctx.send(embed=e)
|
|
except discord.Forbidden:
|
|
await ctx.send(Texts('admin').get("Unable to ban this user"))
|
|
else:
|
|
await ctx.send(Texts('admin').get("Unable to find the user..."))
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
@commands.command(name='clear')
|
|
async def _clear(self, ctx: commands.Context, count: int):
|
|
try:
|
|
await ctx.message.delete()
|
|
await ctx.channel.purge(limit=count)
|
|
except discord.errors.Forbidden:
|
|
pass
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
@commands.group(name='react')
|
|
async def _react(self, ctx: commands.Context):
|
|
if ctx.invoked_subcommand is None:
|
|
return
|
|
|
|
@_react.command(name='add')
|
|
async def _react_add(self, ctx: commands.Context, message_id: int, *,
|
|
emojis: str):
|
|
emojis: list = emojis.split(' ')
|
|
message: discord.Message = await ctx.channel.fetch_message(message_id)
|
|
|
|
for emoji in emojis:
|
|
await message.add_reaction(emoji)
|
|
|
|
@_react.command(name='clear')
|
|
async def _react_remove(self, ctx: commands.Context, message_id: int):
|
|
message: discord.Message = await ctx.channel.fetch_message(message_id)
|
|
await message.clear_reactions()
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
|
|
def setup(bot: TuxBot):
|
|
bot.add_cog(Admin(bot))
|