mirror of
https://github.com/TotalFreedomMC/TotalFreedomBot.git
synced 2024-12-22 23:54:58 +00:00
Update main.py
This commit is contained in:
parent
32df150de3
commit
755a0f7485
1 changed files with 109 additions and 5 deletions
110
main.py
110
main.py
|
@ -5,14 +5,18 @@ import os
|
||||||
import time
|
import time
|
||||||
import random
|
import random
|
||||||
import aiofiles
|
import aiofiles
|
||||||
|
import re
|
||||||
|
|
||||||
|
from unicode import *
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
botToken = os.getenv('botToken')
|
botToken = os.getenv('botToken')
|
||||||
|
|
||||||
bot = commands.Bot(command_prefix=os.getenv('prefix'), description='TotalFreedom bot help command')
|
intents = discord.Intents.all()
|
||||||
|
|
||||||
|
bot = commands.Bot(command_prefix=os.getenv('prefix'), description='TotalFreedom bot help command', intents=intents)
|
||||||
|
|
||||||
devs = [114348811995840515, 147765181903011840]
|
devs = [114348811995840515, 147765181903011840]
|
||||||
|
|
||||||
|
@ -24,6 +28,19 @@ extensions = [
|
||||||
"commands.ServerCommands"
|
"commands.ServerCommands"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
guild_id = 769659653096472627
|
||||||
|
mentions_channel_id = 769659654027739151
|
||||||
|
server_liaison = 769659653096472634
|
||||||
|
event_host = 769659653096472629
|
||||||
|
server_banned = 769659653096472636
|
||||||
|
senior_admin = 769659653129896016
|
||||||
|
admin = 769659653121900553
|
||||||
|
master_builder = 769659653121900550
|
||||||
|
reports_channel_id = 769659654791233585
|
||||||
|
archived_reports_channel_id = 769659655033978900
|
||||||
|
discord_admin = 769659653129896025
|
||||||
|
discord_mod = 769659653129896023
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
for extension in extensions:
|
for extension in extensions:
|
||||||
try:
|
try:
|
||||||
|
@ -57,7 +74,65 @@ async def on_ready():
|
||||||
global starttime
|
global starttime
|
||||||
starttime = datetime.datetime.utcnow()
|
starttime = datetime.datetime.utcnow()
|
||||||
|
|
||||||
|
def did_mention_other_user(users, author):
|
||||||
|
for user in users:
|
||||||
|
if user is not author:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_avatar(user, animate=True):
|
||||||
|
if user.avatar_url:
|
||||||
|
avatar = str(user.avatar_url).replace(".webp", ".png")
|
||||||
|
else:
|
||||||
|
avatar = str(user.default_avatar_url)
|
||||||
|
if not animate:
|
||||||
|
avatar = avatar.replace(".gif", ".png")
|
||||||
|
return avatar
|
||||||
|
|
||||||
|
@bot.event
|
||||||
|
async def on_message(message):
|
||||||
|
if message.guild and message.author is message.guild.me and message.channel.id == reports_channel_id:
|
||||||
|
await message.add_reaction(clipboard)
|
||||||
|
if 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()):
|
||||||
|
await message.author.ban(reason="Name is an invite link.")
|
||||||
|
await message.delete()
|
||||||
|
bypass_roles = [discord_admin, discord_mod]
|
||||||
|
bypass = False
|
||||||
|
for role in message.author.roles:
|
||||||
|
if role.id in bypass_roles:
|
||||||
|
bypass = True
|
||||||
|
if not bypass:
|
||||||
|
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):
|
||||||
|
await message.delete()
|
||||||
|
await message.channel.send(f"{message.author.mention} do not post invite links to other discord servers.")
|
||||||
|
return
|
||||||
|
await bot.process_commands(message)
|
||||||
|
|
||||||
|
@bot.event
|
||||||
|
async def on_message_delete(message):
|
||||||
|
if not isinstance(message.author, discord.Member):
|
||||||
|
return
|
||||||
|
if message.guild.id != guild_id:
|
||||||
|
return
|
||||||
|
users = None
|
||||||
|
roles = None
|
||||||
|
if did_mention_other_user(message.mentions, message.author):
|
||||||
|
users = ", ".join([str(member) for member in message.mentions])
|
||||||
|
if message.role_mentions:
|
||||||
|
roles = ", ".join([role.name for role in message.role_mentions])
|
||||||
|
if not users and not roles:
|
||||||
|
return
|
||||||
|
embed = discord.Embed(description="In {}".format(message.channel.mention))
|
||||||
|
if users is not None:
|
||||||
|
embed.add_field(name="Users", value=users, inline=True)
|
||||||
|
if roles is not None:
|
||||||
|
embed.add_field(name="Roles", value=roles, inline=True)
|
||||||
|
embed.color = 0xFF0000
|
||||||
|
embed.title = "Message Deletion"
|
||||||
|
embed.set_footer(text=str(message.author), icon_url=get_avatar(message.author))
|
||||||
|
channel = message.guild.get_channel(mentions_channel_id)
|
||||||
|
await channel.send(embed=embed)
|
||||||
|
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
|
@ -74,6 +149,22 @@ async def on_raw_reaction_add(payload):
|
||||||
for role_id, msg_id, emoji in bot.reaction_roles:
|
for role_id, msg_id, emoji in bot.reaction_roles:
|
||||||
if msg_id == payload.message_id and emoji == str(payload.emoji.name.encode('utf-8')):
|
if msg_id == payload.message_id and emoji == str(payload.emoji.name.encode('utf-8')):
|
||||||
await payload.member.add_roles(bot.get_guild(payload.guild_id).get_role(role_id), reason='reaction')
|
await payload.member.add_roles(bot.get_guild(payload.guild_id).get_role(role_id), reason='reaction')
|
||||||
|
if payload.channel_id == reports_channel_id:
|
||||||
|
guild = bot.get_guild(guild_id)
|
||||||
|
reports_channel = bot.get_channel(reports_channel_id)
|
||||||
|
report = await reports_channel.fetch_message(payload.message_id)
|
||||||
|
if report.author == guild.me:
|
||||||
|
if payload.emoji.name == clipboard:
|
||||||
|
await report.add_reaction(confirm)
|
||||||
|
await report.add_reaction(cancel)
|
||||||
|
elif payload.emoji.name == cancel:
|
||||||
|
await report.clear_reactions()
|
||||||
|
await report.add_reaction(clipboard)
|
||||||
|
elif payload.emoji.name == confirm:
|
||||||
|
embed = report.embeds[0]
|
||||||
|
archived_reports_channel = bot.get_channel(archived_reports_channel_id)
|
||||||
|
await report.delete()
|
||||||
|
await archived_reports_channel.send("Handled by " + guild.get_member(payload.user_id).mention, embed=embed)
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_raw_reaction_remove(payload):
|
async def on_raw_reaction_remove(payload):
|
||||||
|
@ -95,8 +186,11 @@ async def setreaction(ctx, role : discord.Role=None, msg : discord.Message=None,
|
||||||
emoji_utf = emoji.encode('utf-8')
|
emoji_utf = emoji.encode('utf-8')
|
||||||
await file.write(f'{role.id} {msg.id} {emoji_utf}\n')
|
await file.write(f'{role.id} {msg.id} {emoji_utf}\n')
|
||||||
|
|
||||||
|
@bot.command()
|
||||||
|
async def ip(ctx):
|
||||||
|
'Returns the server IP'
|
||||||
|
await ctx.send('play.totalfreedom.me')
|
||||||
|
# pass # discordSRV responds already.
|
||||||
def insert_returns(body):
|
def insert_returns(body):
|
||||||
# insert return stmt if the last expression is a expression statement
|
# insert return stmt if the last expression is a expression statement
|
||||||
if isinstance(body[-1], ast.Expr):
|
if isinstance(body[-1], ast.Expr):
|
||||||
|
@ -112,6 +206,16 @@ def insert_returns(body):
|
||||||
if isinstance(body[-1], ast.With):
|
if isinstance(body[-1], ast.With):
|
||||||
insert_returns(body[-1].body)
|
insert_returns(body[-1].body)
|
||||||
|
|
||||||
|
async def fix_reports():
|
||||||
|
reports_channel = 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
|
||||||
|
return fixed
|
||||||
|
|
||||||
@bot.command(pass_context=True)
|
@bot.command(pass_context=True)
|
||||||
@commands.check(is_dev)
|
@commands.check(is_dev)
|
||||||
async def killbot(ctx):
|
async def killbot(ctx):
|
||||||
|
|
Loading…
Reference in a new issue