mirror of
				https://github.com/TitanEmbeds/Titan.git
				synced 2025-11-04 07:47:10 +01:00 
			
		
		
		
	Added kick and ban commands to bot
This commit is contained in:
		@@ -13,6 +13,8 @@ Base = declarative_base()
 | 
			
		||||
from titanembeds.database.guilds import Guilds
 | 
			
		||||
from titanembeds.database.messages import Messages
 | 
			
		||||
from titanembeds.database.guild_members import GuildMembers
 | 
			
		||||
from titanembeds.database.unauthenticated_users import UnauthenticatedUsers
 | 
			
		||||
from titanembeds.database.unauthenticated_bans import UnauthenticatedBans
 | 
			
		||||
 | 
			
		||||
class DatabaseInterface(object):
 | 
			
		||||
    # Courtesy of https://github.com/SunDwarf/Jokusoramame
 | 
			
		||||
@@ -290,12 +292,59 @@ class DatabaseInterface(object):
 | 
			
		||||
                            True,
 | 
			
		||||
                            "[]"
 | 
			
		||||
                        )
 | 
			
		||||
                        db.session.add(dbusr)
 | 
			
		||||
                        session.add(dbusr)
 | 
			
		||||
                if changed:
 | 
			
		||||
                    session.commit()
 | 
			
		||||
 | 
			
		||||
    async def ban_unauth_user_by_query(self, query):
 | 
			
		||||
    async def ban_unauth_user_by_query(self, guild_id, placer_id, username, discriminator):
 | 
			
		||||
        async with threadpool():
 | 
			
		||||
            with self.get_session() as session:
 | 
			
		||||
                pass
 | 
			
		||||
                #dbusr = session.query()
 | 
			
		||||
                dbuser = None
 | 
			
		||||
                if discriminator:
 | 
			
		||||
                    dbuser = session.query(UnauthenticatedUsers) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.guild_id == guild_id) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.username.ilike("%" + username + "%")) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.discriminator == discriminator) \
 | 
			
		||||
                        .order_by(UnauthenticatedUsers.id.desc()).first()
 | 
			
		||||
                else:
 | 
			
		||||
                    dbuser = session.query(UnauthenticatedUsers) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.guild_id == guild_id) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.username.ilike("%" + username + "%")) \
 | 
			
		||||
                        .order_by(UnauthenticatedUsers.id.desc()).first()
 | 
			
		||||
                if not dbuser:
 | 
			
		||||
                    return "Ban error! Guest user cannot be found."
 | 
			
		||||
                dbban = session.query(UnauthenticatedBans) \
 | 
			
		||||
                    .filter(UnauthenticatedBans.guild_id == guild_id) \
 | 
			
		||||
                    .filter(UnauthenticatedBans.last_username == dbuser.username) \
 | 
			
		||||
                    .filter(UnauthenticatedBans.last_discriminator == dbuser.discriminator).first()
 | 
			
		||||
                if dbban is not None:
 | 
			
		||||
                    if dbban.lifter_id is None:
 | 
			
		||||
                        return "Ban error! Guest user, **{}#{}**, has already been banned.".format(dbban.last_username, dbban.last_discriminator)
 | 
			
		||||
                    session.delete(dbban)
 | 
			
		||||
                dbban = UnauthenticatedBans(guild_id, dbuser.ip_address, dbuser.username, dbuser.discriminator, "", placer_id)
 | 
			
		||||
                session.add(dbban)
 | 
			
		||||
                session.commit()
 | 
			
		||||
                return "Guest user, **{}#{}**, has successfully been added to the ban list!".format(dbban.last_username, dbban.last_discriminator)
 | 
			
		||||
 | 
			
		||||
    async def revoke_unauth_user_by_query(self, guild_id, username, discriminator):
 | 
			
		||||
        async with threadpool():
 | 
			
		||||
            with self.get_session() as session:
 | 
			
		||||
                dbuser = None
 | 
			
		||||
                if discriminator:
 | 
			
		||||
                    dbuser = session.query(UnauthenticatedUsers) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.guild_id == guild_id) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.username.ilike("%" + username + "%")) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.discriminator == discriminator) \
 | 
			
		||||
                        .order_by(UnauthenticatedUsers.id.desc()).first()
 | 
			
		||||
                else:
 | 
			
		||||
                    dbuser = session.query(UnauthenticatedUsers) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.guild_id == guild_id) \
 | 
			
		||||
                        .filter(UnauthenticatedUsers.username.ilike("%" + username + "%")) \
 | 
			
		||||
                        .order_by(UnauthenticatedUsers.id.desc()).first()
 | 
			
		||||
                if not dbuser:
 | 
			
		||||
                    return "Kick error! Guest user cannot be found."
 | 
			
		||||
                elif dbuser.revoked:
 | 
			
		||||
                    return "Kick error! Guest user **{}#{}** has already been kicked!".format(dbuser.username, dbuser.discriminator)
 | 
			
		||||
                dbuser.revoked = True
 | 
			
		||||
                session.commit()
 | 
			
		||||
                return "Successfully kicked **{}#{}**!".format(dbuser.username, dbuser.discriminator)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								discordbot/titanembeds/database/unauthenticated_bans.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								discordbot/titanembeds/database/unauthenticated_bans.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
from titanembeds.database import db, Base
 | 
			
		||||
import datetime
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
class UnauthenticatedBans(Base):
 | 
			
		||||
    __tablename__ = "unauthenticated_bans"
 | 
			
		||||
    id = db.Column(db.Integer, primary_key=True)    # Auto increment id
 | 
			
		||||
    guild_id = db.Column(db.String(255))            # Guild pretaining to the unauthenticated user
 | 
			
		||||
    ip_address = db.Column(db.String(255))          # The IP Address of the user
 | 
			
		||||
    last_username = db.Column(db.String(255))       # The username when they got banned
 | 
			
		||||
    last_discriminator = db.Column(db.Integer)      # The discrim when they got banned
 | 
			
		||||
    timestamp = db.Column(db.TIMESTAMP)             # The timestamp of when the user got banned
 | 
			
		||||
    reason = db.Column(db.Text())                   # The reason of the ban set by the guild moderators
 | 
			
		||||
    lifter_id = db.Column(db.String(255))           # Discord Client ID of the user who lifted the ban
 | 
			
		||||
    placer_id = db.Column(db.String(255))           # The id of who placed the ban
 | 
			
		||||
 | 
			
		||||
    def __init__(self, guild_id, ip_address, last_username, last_discriminator, reason, placer_id):
 | 
			
		||||
        self.guild_id = guild_id
 | 
			
		||||
        self.ip_address = ip_address
 | 
			
		||||
        self.last_username = last_username
 | 
			
		||||
        self.last_discriminator = last_discriminator
 | 
			
		||||
        self.timestamp = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
 | 
			
		||||
        self.reason = reason
 | 
			
		||||
        self.lifter_id = None
 | 
			
		||||
        self.placer_id = placer_id
 | 
			
		||||
 | 
			
		||||
    def __repr__(self):
 | 
			
		||||
        return '<UnauthenticatedBans {0} {1} {2} {3} {4} {5}'.format(self.id, self.guild_id, self.ip_address, self.last_username, self.last_discriminator, self.timestamp)
 | 
			
		||||
							
								
								
									
										19
									
								
								discordbot/titanembeds/database/unauthenticated_users.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								discordbot/titanembeds/database/unauthenticated_users.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
from titanembeds.database import db, Base
 | 
			
		||||
import datetime
 | 
			
		||||
import time
 | 
			
		||||
import random
 | 
			
		||||
import string
 | 
			
		||||
 | 
			
		||||
class UnauthenticatedUsers(Base):
 | 
			
		||||
    __tablename__ = "unauthenticated_users"
 | 
			
		||||
    id = db.Column(db.Integer, primary_key=True)    # Auto increment id
 | 
			
		||||
    guild_id = db.Column(db.String(255))            # Guild pretaining to the unauthenticated user
 | 
			
		||||
    username = db.Column(db.String(255))            # The username of the user
 | 
			
		||||
    discriminator = db.Column(db.Integer)           # The discriminator to distinguish unauth users with each other
 | 
			
		||||
    user_key = db.Column(db.Text())                 # The secret key used to identify the user holder
 | 
			
		||||
    ip_address = db.Column(db.String(255))          # The IP Address of the user
 | 
			
		||||
    last_timestamp = db.Column(db.TIMESTAMP)        # The timestamp of when the user has last sent the heartbeat
 | 
			
		||||
    revoked = db.Column(db.Boolean())               # If the user's key has been revoked and a new one is required to be generated
 | 
			
		||||
 | 
			
		||||
    def __repr__(self):
 | 
			
		||||
        return '<UnauthenticatedUsers {0} {1} {2} {3} {4} {5} {6} {7}>'.format(self.id, self.guild_id, self.username, self.discriminator, self.user_key, self.ip_address, self.last_timestamp, self.revoked)
 | 
			
		||||
		Reference in New Issue
	
	Block a user