add(command|kick/ban): rewrite kick and ban commands
This commit is contained in:
parent
806ddf0540
commit
c0af425383
11 changed files with 225 additions and 56 deletions
102
cogs/admin.py
102
cogs/admin.py
|
@ -1,5 +1,10 @@
|
|||
import datetime
|
||||
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
|
||||
from bot import TuxBot
|
||||
from .utils.lang import Texts
|
||||
|
||||
|
||||
class Admin(commands.Cog):
|
||||
|
@ -9,17 +14,100 @@ class Admin(commands.Cog):
|
|||
|
||||
async def cog_check(self, ctx: commands.Context):
|
||||
permissions = ctx.channel.permissions_for(ctx.author)
|
||||
return permissions.administrator
|
||||
|
||||
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', pass_context=True)
|
||||
@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:
|
||||
# await ctx.send(to_say)
|
||||
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..."))
|
||||
|
||||
"""---------------------------------------------------------------------"""
|
||||
|
||||
|
||||
def setup(bot: TuxBot):
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
import gettext
|
||||
import config
|
||||
|
||||
lang = gettext.translation('base', localedir='locales',
|
||||
languages=[config.lang])
|
||||
lang.install()
|
||||
|
||||
gettext = lang.gettext
|
||||
class Texts:
|
||||
def __init__(self, base: str = 'base'):
|
||||
self.locale = config.locale
|
||||
self.texts = gettext.translation(base, localedir='locales',
|
||||
languages=[self.locale])
|
||||
self.texts.install()
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.texts
|
||||
|
||||
def get(self, text: str) -> str:
|
||||
return self.texts.gettext(text)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue