2020-10-28 11:47:39 +00:00
|
|
|
import os
|
2020-11-21 12:38:59 +00:00
|
|
|
import re
|
2021-01-07 19:15:10 +00:00
|
|
|
import time
|
2020-10-28 12:23:49 +00:00
|
|
|
from datetime import datetime
|
2021-01-07 19:15:10 +00:00
|
|
|
|
|
|
|
import discord
|
2020-10-28 11:47:39 +00:00
|
|
|
from discord.ext import commands
|
|
|
|
from dotenv import load_dotenv
|
2021-01-07 19:15:10 +00:00
|
|
|
|
|
|
|
from functions import config_entry, get_prefix, hit_endpoint, get_server_status
|
|
|
|
from unicode import clipboard
|
2020-11-21 12:38:59 +00:00
|
|
|
|
2021-03-29 23:19:41 +00:00
|
|
|
# print = logscript.logging.getLogger().critical
|
2020-10-28 11:47:39 +00:00
|
|
|
|
|
|
|
load_dotenv()
|
|
|
|
botToken = os.getenv('botToken')
|
|
|
|
|
|
|
|
intents = discord.Intents.all()
|
2021-01-04 23:43:48 +00:00
|
|
|
bot = commands.Bot(command_prefix=get_prefix, case_insensitive=True, description='TotalFreedom bot help command',
|
|
|
|
intents=intents)
|
2020-11-21 12:38:59 +00:00
|
|
|
|
2021-01-07 19:15:10 +00:00
|
|
|
bot.server_liaison = config_entry("server_liaison")
|
|
|
|
bot.event_host = config_entry("event_host")
|
|
|
|
bot.server_banned = config_entry("server_banned")
|
|
|
|
bot.senior_admin = config_entry("senior_admin")
|
|
|
|
bot.admin = config_entry("admin")
|
|
|
|
bot.master_builder = config_entry("master_builder")
|
|
|
|
bot.reports_channel_id = config_entry("reports_channel_id")
|
|
|
|
bot.archived_reports_channel_id = config_entry("archived_reports_channel_id")
|
|
|
|
bot.guild_id = config_entry("guild_id")
|
|
|
|
bot.mentions_channel_id = config_entry("mentions_channel_id")
|
|
|
|
bot.discord_admin = config_entry("discord_admin")
|
|
|
|
bot.discord_mod = config_entry("discord_mod")
|
|
|
|
bot.devs = config_entry("devs")
|
|
|
|
bot.bot_logs_channel_id = config_entry("bot_logs_channel_id")
|
|
|
|
bot.executive = config_entry("executive")
|
|
|
|
bot.asst_exec = config_entry("asst_exec")
|
|
|
|
bot.developer = config_entry("developer")
|
|
|
|
bot.creative_designer = config_entry("creative_designer")
|
|
|
|
bot.server_chat = config_entry("server_chat")
|
|
|
|
bot.verification_role = config_entry("verification_role")
|
|
|
|
bot.server_chat_2 = config_entry("server_chat_2")
|
2021-03-29 22:57:23 +00:00
|
|
|
bot.guild_id = 769659653096472627
|
|
|
|
bot.smp_server_chat = config_entry("smp_server_chat")
|
|
|
|
bot.smpstaff_role_id = config_entry("smpstaff_role_id")
|
|
|
|
bot.smp_owner_id = config_entry("smp_owner_id")
|
|
|
|
bot.gmod_server_chat = config_entry("gmod_server_chat")
|
|
|
|
bot.gmodstaff_role_id = config_entry("gmodstaff_role_id")
|
|
|
|
bot.gmod_owner_id = config_entry('gmod_owner_id')
|
|
|
|
bot.auto_restart = False
|
2021-01-07 19:15:10 +00:00
|
|
|
|
2020-10-28 11:47:39 +00:00
|
|
|
extensions = [
|
2020-10-28 12:23:49 +00:00
|
|
|
"commands.moderation",
|
|
|
|
"commands.server_commands",
|
2020-10-28 11:47:39 +00:00
|
|
|
"commands.help",
|
2020-10-28 12:23:49 +00:00
|
|
|
"commands.miscellaneous",
|
|
|
|
"events"
|
2020-10-28 11:47:39 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
for extension in extensions:
|
|
|
|
try:
|
|
|
|
bot.load_extension(extension)
|
2020-12-02 21:59:01 +00:00
|
|
|
print(
|
2021-03-29 22:57:23 +00:00
|
|
|
f"[{str(datetime.utcnow().replace(microsecond=0))[11:]} INFO]: [Extensions] {extension} loaded "
|
|
|
|
f"successfully")
|
2020-10-28 11:47:39 +00:00
|
|
|
except Exception as e:
|
2020-12-02 21:59:01 +00:00
|
|
|
print(
|
2021-03-29 22:57:23 +00:00
|
|
|
f"[{str(datetime.utcnow().replace(microsecond=0))[11:]} INFO]: [Extensions] {extension} didn't load {e}"
|
|
|
|
)
|
2020-10-28 11:47:39 +00:00
|
|
|
|
2020-11-21 12:38:59 +00:00
|
|
|
|
|
|
|
@bot.event
|
|
|
|
async def on_message(message):
|
2020-12-19 15:54:24 +00:00
|
|
|
if isinstance(message.channel, discord.channel.DMChannel):
|
|
|
|
print(f'{message.author} DM: {message.content}')
|
|
|
|
return
|
2021-01-07 19:15:10 +00:00
|
|
|
elif message.guild and message.author is message.guild.me and message.channel.id == bot.reports_channel_id:
|
2020-11-21 12:38:59 +00:00
|
|
|
await message.add_reaction(clipboard)
|
2021-01-04 23:43:48 +00:00
|
|
|
elif message.type == discord.MessageType.new_member:
|
|
|
|
if re.search('discord\.gg\/[a-zA-z0-9\-]{1,16}', message.author.name.lower()) or re.search(
|
|
|
|
'discordapp\.com\/invite\/[a-z0-9]+/ig', message.author.name.lower()):
|
2020-11-21 12:38:59 +00:00
|
|
|
await message.author.ban(reason="Name is an invite link.")
|
|
|
|
await message.delete()
|
2021-01-07 19:15:10 +00:00
|
|
|
bypass_roles = [bot.discord_admin, bot.discord_mod]
|
2020-11-21 12:38:59 +00:00
|
|
|
bypass = False
|
|
|
|
if message.author != bot.user:
|
|
|
|
for role in message.author.roles:
|
|
|
|
if role.id in bypass_roles:
|
|
|
|
bypass = True
|
2021-03-29 22:57:23 +00:00
|
|
|
|
2021-03-29 23:19:41 +00:00
|
|
|
asked_for_ip = re.search("(((give *(me)?)|(wh?at'? *i?s?))( *the)?( *server)? *ip)|(ip\?)",
|
|
|
|
message.content.lower())
|
2021-03-29 22:57:23 +00:00
|
|
|
if asked_for_ip is not None:
|
|
|
|
print("THE IP IS GAY")
|
|
|
|
em = discord.Embed(
|
|
|
|
title='Server IP',
|
|
|
|
colour=0xA84300,
|
|
|
|
description='play.totalfreedom.me'
|
|
|
|
)
|
|
|
|
await message.channel.send(embed=em)
|
|
|
|
|
|
|
|
if bot.auto_restart:
|
|
|
|
server_chats = [bot.server_chat, bot.server_chat_2]
|
|
|
|
for server in range(1, 3):
|
|
|
|
if message.channel.id == server_chats[server]:
|
|
|
|
if not get_server_status(server):
|
|
|
|
em = discord.Embed()
|
|
|
|
em.title = 'Automatic restart'
|
|
|
|
attempt = hit_endpoint('start', server)
|
|
|
|
if attempt == "ERROR - There is an instance of the server already running. Make sure it is " \
|
|
|
|
"killed first and try again":
|
|
|
|
hit_endpoint('stop', server)
|
|
|
|
hit_endpoint('stop', server)
|
|
|
|
hit_endpoint('start', server)
|
|
|
|
em.colour = 0x00FF00
|
|
|
|
em.description = 'Server has been automatically restarted.'
|
|
|
|
else:
|
|
|
|
em.colour = 0x00FF00
|
|
|
|
em.description = 'Server has been automatically started.'
|
|
|
|
await message.channel.send(embed=em)
|
|
|
|
|
|
|
|
if 'Server has started' in message.content: # Telnet reconnect script
|
|
|
|
try:
|
|
|
|
bot.telnet_object.connect()
|
|
|
|
except Exception as err:
|
|
|
|
print(f'Failed to reconnect telnet: {err}')
|
|
|
|
time.sleep(5)
|
2020-11-21 12:38:59 +00:00
|
|
|
try:
|
|
|
|
bot.telnet_object.connect()
|
2021-03-29 22:57:23 +00:00
|
|
|
except Exception as fuckup:
|
|
|
|
print(
|
|
|
|
f'Second attempt failed to reconnect telnet: {fuckup}')
|
|
|
|
try:
|
|
|
|
bot.telnet_object_2.connect()
|
|
|
|
except Exception as err:
|
|
|
|
print(f'Failed to reconnect telnet 2: {err}')
|
|
|
|
time.sleep(5)
|
2021-01-04 23:43:48 +00:00
|
|
|
try:
|
|
|
|
bot.telnet_object_2.connect()
|
2021-03-29 22:57:23 +00:00
|
|
|
except Exception as fuckup:
|
|
|
|
print(
|
|
|
|
f'Second attempt failed to reconnect telnet 2: {fuckup}')
|
2020-11-21 12:38:59 +00:00
|
|
|
if not bypass:
|
2021-01-04 23:43:48 +00:00
|
|
|
if re.search('discord\.gg\/[a-zA-z0-9\-]{1,16}', message.content) or re.search(
|
|
|
|
'discordapp\.com\/invite\/[a-z0-9]+/ig', message.content):
|
2020-11-21 12:38:59 +00:00
|
|
|
await message.delete()
|
|
|
|
await message.channel.send(f"{message.author.mention} do not post invite links to other discord servers.")
|
2020-12-02 21:59:01 +00:00
|
|
|
|
2020-12-19 15:54:24 +00:00
|
|
|
await bot.process_commands(message)
|
2020-11-21 12:38:59 +00:00
|
|
|
|
2021-01-04 23:43:48 +00:00
|
|
|
|
2020-10-28 12:23:49 +00:00
|
|
|
bot.run(botToken)
|