mirror of
https://github.com/TotalFreedomMC/TotalFreedomBot.git
synced 2025-07-28 00:14:17 +00:00
Add files via upload
This commit is contained in:
parent
102df63908
commit
fc4cc4e37a
10 changed files with 693 additions and 0 deletions
34
commands/Miscellaneous.py
Normal file
34
commands/Miscellaneous.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
import discord
|
||||
import asyncio
|
||||
|
||||
from discord.ext import commands
|
||||
from checks import *
|
||||
|
||||
class Miscellaneous(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
@is_dev()
|
||||
@commands.command(pass_context=True)
|
||||
async def killbot(self, ctx):
|
||||
em = discord.Embed()
|
||||
em.description = 'Bot offline.'
|
||||
await ctx.send(embed=em)
|
||||
await self.bot.logout()
|
||||
|
||||
@is_dev()
|
||||
@commands.command(name='debug')
|
||||
async def debug(self, ctx, *, cmd):
|
||||
'Executes a line of code'
|
||||
try:
|
||||
result = eval(cmd)
|
||||
if asyncio.iscoroutine(result):
|
||||
result = await result
|
||||
await ctx.send(f'''```py
|
||||
{result}```''')
|
||||
except Exception as e:
|
||||
await ctx.send(f'''```py
|
||||
{type(e).__name__}: {e}```''')
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Miscellaneous(bot))
|
79
commands/Moderation.py
Normal file
79
commands/Moderation.py
Normal file
|
@ -0,0 +1,79 @@
|
|||
import discord
|
||||
import datetime
|
||||
|
||||
from discord.ext import commands
|
||||
from checks import *
|
||||
|
||||
muted_role_id = 769659653121900546
|
||||
|
||||
class Moderation(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
self.moderator_role_id = 769659653129896023
|
||||
|
||||
@commands.command()
|
||||
@commands.has_permissions(kick_members=True)
|
||||
async def kick(self, ctx, user: discord.Member, *, reason="No reason specified"):
|
||||
"""Kicks a user from the guild."""
|
||||
await user.kick(reason=f'{reason}** **by: {ctx.author.name}')
|
||||
await ctx.send(embed=discord.Embed(embed=f'{user.name} has been kicked by: {ctx.author.name} for reason: {reason}'))
|
||||
print(f"[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Moderation] Kicked {user.name} from {ctx.guild.name}")
|
||||
|
||||
@commands.command(aliases=['gtfo'])
|
||||
@commands.has_permissions(ban_members=True)
|
||||
async def ban(self, ctx, user: discord.Member, *, reason="No reason specified"):
|
||||
"""Bans a user from the guild."""
|
||||
await user.ban(reason=f'{reason} || by: {ctx.author.name}', delete_message_days=0)
|
||||
await ctx.send(embed=discord.Embed(description=f'{user.name} has been banned by: {ctx.author.name} for reason: {reason}'))
|
||||
print(f"[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Moderation] Banned {user.name} from {ctx.guild.name}")
|
||||
|
||||
@commands.command()
|
||||
@commands.has_permissions(ban_members=True)
|
||||
async def unban(self, ctx, user: discord.User, *, reason="No reason specified"):
|
||||
"""Unbans a user from the guild."""
|
||||
await ctx.guild.unban(user, reason=f'{reason} || by: {ctx.author.name}')
|
||||
await ctx.send(embed=discord.Embed(description=f'{user.name} has been unbanned by: {ctx.author.name} for reason: {reason}'))
|
||||
print(f"[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Moderation] Banned {user.name} from {ctx.guild.name}")
|
||||
|
||||
@commands.command(aliases=['massdelete','purge'])
|
||||
@commands.has_permissions(manage_messages=True)
|
||||
async def prune(self, ctx, msgs):
|
||||
"""Purge messages from a channel."""
|
||||
channel = ctx.channel
|
||||
await channel.purge(limit=(int(msgs) + 1))
|
||||
await ctx.send(embed=discord.Embed(description=f'{ctx.author.name} deleted {msgs} messages'))
|
||||
print(f'[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Moderation] {ctx.author.name} purged {msgs} messages in {ctx.guild.name}')
|
||||
|
||||
@commands.command(aliases=['stfu'])
|
||||
@commands.has_permissions(manage_messages=True)
|
||||
async def mute(self, ctx, member: discord.Member, *, reason=''):
|
||||
"""Mutes a member of the server."""
|
||||
muted_role = ctx.guild.get_role(muted_role_id)
|
||||
await member.add_roles(muted_role, reason = f'{reason} || by {ctx.author.name}')
|
||||
if reason == '':
|
||||
reason = 'No reason specified'
|
||||
await ctx.send(embed=discord.Embed(description=f'{member} muted by: {ctx.author.name} for: {reason}'))
|
||||
print(f'[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Moderation] Muted {member} in {ctx.guild.name}')
|
||||
|
||||
@commands.command()
|
||||
@commands.has_permissions(manage_messages=True)
|
||||
async def unmute(self, ctx, member: discord.Member, *, reason=''):
|
||||
"""Unmutes a member of the server."""
|
||||
muted_role = ctx.guild.get_role(muted_role_id)
|
||||
await member.remove_roles(muted_role, reason = f'{reason} || by {ctx.author.name}')
|
||||
await ctx.send(embed=discord.Embed(description=f'{member} unmuted by {ctx.author.name}'))
|
||||
print(f'[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Moderation] Unmuted {member} in {ctx.guild.name}')
|
||||
|
||||
@commands.command()
|
||||
@commands.has_permissions(manage_roles=True)
|
||||
async def setreaction(self, ctx, role : discord.Role=None, msg : discord.Message=None, emoji=None):
|
||||
if role and msg and emoji :
|
||||
await msg.add_reaction(emoji)
|
||||
self.bot.reaction_roles.append((role.id,msg.id,str(emoji.encode('utf-8'))))
|
||||
|
||||
async with aiofiles.open("reactionroles.txt", mode='a') as file:
|
||||
emoji_utf = emoji.encode('utf-8')
|
||||
await file.write(f'{role.id} {msg.id} {emoji_utf}\n')
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Moderation(bot))
|
46
commands/Music.py
Normal file
46
commands/Music.py
Normal file
|
@ -0,0 +1,46 @@
|
|||
import discord
|
||||
from discord.ext import commands
|
||||
import datetime
|
||||
import youtube_dl
|
||||
import os
|
||||
|
||||
class Music(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
@commands.command()
|
||||
async def join(self, ctx):
|
||||
bot = ctx.bot
|
||||
vc = ctx.author.voice.channel
|
||||
voiceClient = discord.utils.get(bot.voice_clients, guild=ctx.guild)
|
||||
if voiceClient and voiceClient.is_connected():
|
||||
await voiceClient.move_to(vc)
|
||||
print(f"[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Music] The bot has moved to {vc} in {ctx.guild.name}\n")
|
||||
await ctx.send(f'Joined `{vc.name}`')
|
||||
else:
|
||||
await vc.connect()
|
||||
print(f"[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Music] The bot has connected to {vc} in {ctx.guild.name}\n")
|
||||
await ctx.send(f'Joined `{vc.name}`')
|
||||
|
||||
@commands.command()
|
||||
async def leave(self, ctx):
|
||||
bot = ctx.bot
|
||||
vc = ctx.author.voice.channel
|
||||
voiceClient = discord.utils.get(bot.voice_clients, guild=ctx.guild)
|
||||
|
||||
if voiceClient and voiceClient.is_connected():
|
||||
await voiceClient.disconnect()
|
||||
await ctx.send(f'Left `{vc.name}`')
|
||||
print(f"[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Music] The bot has disconnected from {vc.name} in {ctx.guild.name}\n")
|
||||
else:
|
||||
await ctx.send(f"`{ctx.author.name}` you fat retard i'm not connected to a vc")
|
||||
print(f'[{datetime.datetime.utcnow().replace(microsecond=0)} INFO]: [Music] {ctx.author} failed running: {ctx.message.content} in guild: {ctx.guild.name}')
|
||||
|
||||
@commands.command(pass_context=True, aliases=['p'])
|
||||
async def play(self, ctx, song):
|
||||
'Not yet working'
|
||||
pass
|
||||
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Music(bot))
|
166
commands/Server Commands.py
Normal file
166
commands/Server Commands.py
Normal file
|
@ -0,0 +1,166 @@
|
|||
import discord
|
||||
|
||||
from checks import *
|
||||
from discord.ext import commands
|
||||
from datetime import datetime
|
||||
import requests
|
||||
from functions import fix_reports, format_list_entry
|
||||
|
||||
class ServerCommands(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
@commands.command()
|
||||
@is_liaison()
|
||||
async def eventhost(self, ctx, user: discord.Member):
|
||||
'Add or remove event host role - liaison only'
|
||||
eventhostrole = ctx.guild.get_role(event_host)
|
||||
if eventhostrole in user.roles:
|
||||
await user.remove_roles(eventhostrole)
|
||||
await ctx.send(f'```Succesfully took Event Host from {user.name}```')
|
||||
else:
|
||||
await user.add_roles(eventhostrole)
|
||||
await ctx.send(f'```Succesfully added Event Host to {user.name}```')
|
||||
|
||||
@commands.command()
|
||||
@is_staff()
|
||||
async def serverban(self, ctx, user: discord.Member):
|
||||
'Add or remove server banned role'
|
||||
serverbannedrole = ctx.guild.get_role(server_banned)
|
||||
if serverbannedrole in user.roles:
|
||||
await user.remove_roles(serverbannedrole)
|
||||
await ctx.send(f'Took Server Banned role from {user.name}')
|
||||
else:
|
||||
await user.add_roles(serverbannedrole)
|
||||
await ctx.send(f'Added Server Banned role to {user.name}')
|
||||
|
||||
@commands.command()
|
||||
@is_staff()
|
||||
async def start(self, ctx):
|
||||
'Not currently working'
|
||||
startEmbed = discord.Embed(description='start working out fatass')
|
||||
await ctx.send(embed=startEmbed)
|
||||
|
||||
@commands.command()
|
||||
@is_staff()
|
||||
async def stop(self, ctx):
|
||||
'Not currently working'
|
||||
stopEmbed = discord.Embed(description='stop being so sus')
|
||||
await ctx.send(embed=stopEmbed)
|
||||
|
||||
@commands.command()
|
||||
@is_senior()
|
||||
async def kill(self, ctx):
|
||||
'Not currently working'
|
||||
killEmbed = discord.Embed(description='kill youself')
|
||||
await ctx.send(embed=killEmbed)
|
||||
|
||||
@commands.command()
|
||||
@is_staff()
|
||||
async def restart(self, ctx):
|
||||
'Not currently working'
|
||||
restartEmbed = discord.Embed(description='cant restart a dead server idiot')
|
||||
await ctx.send(embed=restartEmbed)
|
||||
|
||||
@commands.command()
|
||||
@is_senior()
|
||||
async def console(self, ctx,*, command):
|
||||
'Not currently working'
|
||||
await ctx.send(f'```:[{str(datetime.utcnow().replace(microsecond=0))[11:]} INFO]: {ctx.author.name} issued server command: /{command}```')
|
||||
|
||||
|
||||
@commands.command(aliases=['status'])
|
||||
async def state(self, ctx):
|
||||
'Gets the current status of the Server'
|
||||
em = discord.Embed()
|
||||
try:
|
||||
json = requests.get("http://play.totalfreedom.me:28966/list?json=true").json()
|
||||
em.description = 'Server is online'
|
||||
except ConnectionError:
|
||||
em.description = 'Server is offline'
|
||||
await ctx.send(embed=em)
|
||||
|
||||
@commands.command()
|
||||
async def list(self, ctx):
|
||||
'Gives a list of online players.'
|
||||
em = discord.Embed()
|
||||
em.title = "Player List"
|
||||
try:
|
||||
json = requests.get("http://play.totalfreedom.me:28966/list?json=true").json()
|
||||
except ConnectionError:
|
||||
em.description = 'Server is offline'
|
||||
else:
|
||||
if json["online"] == 0:
|
||||
em.description = "There are no online players"
|
||||
else:
|
||||
em.description = "There are {} / {} online players".format(json["online"], json["max"])
|
||||
owners = json["owners"]
|
||||
if len(owners) != 0:
|
||||
em = format_list_entry(em, owners, "Server Owners")
|
||||
executives = json["executives"]
|
||||
if len(executives) != 0:
|
||||
em = format_list_entry(em, executives, "Executives")
|
||||
developers = json["developers"]
|
||||
if len(developers) != 0:
|
||||
em = format_list_entry(em, developers, "Developers")
|
||||
senior_admins = json["senioradmins"]
|
||||
if len(senior_admins) != 0:
|
||||
em = format_list_entry(em, senior_admins, "Senior Admins")
|
||||
admins = json["admins"]
|
||||
if len(admins) != 0:
|
||||
em = format_list_entry(em, admins, "Admins")
|
||||
#trialadmins = json["trialadmins"]
|
||||
#if len(trialadmins) != 0:
|
||||
#em = format_list_entry(em, trialmods, "Trial Mods")
|
||||
masterbuilders = json["masterbuilders"]
|
||||
if len(masterbuilders) != 0:
|
||||
em = format_list_entry(em, masterbuilders, "Master Builders")
|
||||
operators = json["operators"]
|
||||
if len(operators) != 0:
|
||||
em = format_list_entry(em, operators, "Operators")
|
||||
imposters = json["imposters"]
|
||||
if len(imposters) != 0:
|
||||
em = format_list_entry(em, imposters, "Imposters")
|
||||
await ctx.send(embed=em)
|
||||
@commands.command()
|
||||
async def ip(self, ctx):
|
||||
'Returns the server IP'
|
||||
await ctx.send('play.totalfreedom.me')
|
||||
#pass # discordSRV responds already.
|
||||
|
||||
@commands.command()
|
||||
@is_staff()
|
||||
async def archivereports(self, ctx):
|
||||
"""Archive all in-game reports older than 24 hours"""
|
||||
count = 0
|
||||
reports_channel = self.bot.get_channel(reports_channel_id)
|
||||
archived_reports_channel = self.bot.get_channel(archived_reports_channel_id)
|
||||
await ctx.channel.trigger_typing()
|
||||
async for report in reports_channel.history(limit=100):
|
||||
try:
|
||||
embed = report.embeds[0]
|
||||
except:
|
||||
await report.delete()
|
||||
time = embed.timestamp
|
||||
difference = datetime.now() - time
|
||||
if difference.days >= 0:
|
||||
await report.delete()
|
||||
await archived_reports_channel.send("Message archived because it is older than 24 hours", embed=embed)
|
||||
count += 1
|
||||
await ctx.send("Archived **{}** reports that are older than 24 hours".format(count))
|
||||
|
||||
@commands.command()
|
||||
@is_mod_or_has_perms()
|
||||
async def fixreports(self, ctx):
|
||||
await ctx.channel.trigger_typing()
|
||||
reports_channel = self.bot.get_channel(reports_channel_id)
|
||||
messages = await reports_channel.history(limit=500).flatten()
|
||||
fixed = 0
|
||||
for message in messages:
|
||||
if len(message.reactions) == 0 and message.author == message.guild.me:
|
||||
await message.add_reaction(clipboard)
|
||||
fixed += 1
|
||||
await ctx.send(f'Fixed **{fixed}** reports')
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(ServerCommands(bot))
|
53
commands/help.py
Normal file
53
commands/help.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
import math
|
||||
import discord
|
||||
|
||||
from discord.ext import commands
|
||||
from functions import get_avatar
|
||||
|
||||
class Help(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
self.bot.remove_command('help')
|
||||
|
||||
@commands.command(aliases=['h','?'])
|
||||
async def help(self, ctx, page=1):
|
||||
'Displays the help command'
|
||||
em = discord.Embed()
|
||||
em.title = 'Help Command'
|
||||
command_list = ''
|
||||
|
||||
cog_list = [c for c in self.bot.cogs.keys()]
|
||||
|
||||
page_count = math.ceil(len(cog_list) / 4)
|
||||
|
||||
page = int(page)
|
||||
if page > page_count or page<1:
|
||||
await ctx.send(f'Page number \'{page}\' not found.')
|
||||
return
|
||||
|
||||
cogs_needed = []
|
||||
for i in range(4):
|
||||
x = i + (int(page) - 1) * 4
|
||||
try:
|
||||
cogs_needed.append(cog_list[x])
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
for cog in cogs_needed:
|
||||
command_list = ''
|
||||
for command in self.bot.get_cog(cog).walk_commands():
|
||||
if command.hidden:
|
||||
continue
|
||||
if command.parent:
|
||||
continue
|
||||
|
||||
command_list += f'**tf!{command.name}** - {command.help}\n'
|
||||
command_list += '\n'
|
||||
|
||||
em.add_field(name=cog, value=command_list, inline=False)
|
||||
|
||||
em.set_footer(text=f'Requested by {ctx.message.author}', icon_url=get_avatar(ctx.message.author))
|
||||
await ctx.send(embed=em)
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Help(bot))
|
Loading…
Add table
Add a link
Reference in a new issue