mirror of
https://github.com/TitanEmbeds/Titan.git
synced 2025-06-16 11:25:22 +02:00
Move columns found in discord api on the guilds table into redis
This commit is contained in:
@ -104,45 +104,45 @@ class Titan(discord.AutoShardedClient):
|
||||
await self.socketio.on_message_delete(message)
|
||||
|
||||
async def on_guild_join(self, guild):
|
||||
await self.database.update_guild(guild)
|
||||
await self.redisqueue.update_guild(guild)
|
||||
await self.postStats()
|
||||
|
||||
async def on_guild_remove(self, guild):
|
||||
await self.database.remove_guild(guild)
|
||||
await self.redisqueue.delete_guild(guild)
|
||||
await self.postStats()
|
||||
|
||||
async def on_guild_update(self, guildbefore, guildafter):
|
||||
await self.database.update_guild(guildafter)
|
||||
await self.redisqueue.update_guild(guildafter)
|
||||
await self.socketio.on_guild_update(guildafter)
|
||||
|
||||
async def on_guild_role_create(self, role):
|
||||
if role.name == self.user.name and role.managed:
|
||||
await asyncio.sleep(2)
|
||||
await self.database.update_guild(role.guild)
|
||||
await self.redisqueue.update_guild(role.guild)
|
||||
await self.socketio.on_guild_role_create(role)
|
||||
|
||||
async def on_guild_role_delete(self, role):
|
||||
if role.guild.me not in role.guild.members:
|
||||
return
|
||||
await self.database.update_guild(role.guild)
|
||||
await self.redisqueue.update_guild(role.guild)
|
||||
await self.socketio.on_guild_role_delete(role)
|
||||
|
||||
async def on_guild_role_update(self, rolebefore, roleafter):
|
||||
await self.database.update_guild(roleafter.guild)
|
||||
await self.redisqueue.update_guild(roleafter.guild)
|
||||
await self.socketio.on_guild_role_update(roleafter)
|
||||
|
||||
async def on_channel_delete(self, channel):
|
||||
if channel.guild:
|
||||
await self.database.update_guild(channel.guild)
|
||||
await self.redisqueue.update_guild(channel.guild)
|
||||
await self.socketio.on_channel_delete(channel)
|
||||
|
||||
async def on_channel_create(self, channel):
|
||||
if channel.guild:
|
||||
await self.database.update_guild(channel.guild)
|
||||
await self.redisqueue.update_guild(channel.guild)
|
||||
await self.socketio.on_channel_create(channel)
|
||||
|
||||
async def on_guild_channel_update(self, channelbefore, channelafter):
|
||||
await self.database.update_guild(channelafter.guild)
|
||||
await self.redisqueue.update_guild(channelafter.guild)
|
||||
await self.socketio.on_channel_update(channelafter)
|
||||
|
||||
async def on_member_join(self, member):
|
||||
@ -164,14 +164,14 @@ class Titan(discord.AutoShardedClient):
|
||||
|
||||
async def on_guild_emojis_update(self, guild, before, after):
|
||||
if len(after) == 0:
|
||||
await self.database.update_guild(guild)
|
||||
await self.redisqueue.update_guild(guild)
|
||||
await self.socketio.on_guild_emojis_update(before)
|
||||
else:
|
||||
await self.database.update_guild(guild)
|
||||
await self.redisqueue.update_guild(guild)
|
||||
await self.socketio.on_guild_emojis_update(after)
|
||||
|
||||
async def on_webhooks_update(self, guild, channel):
|
||||
await self.database.update_guild(guild)
|
||||
await self.redisqueue.update_guild(guild)
|
||||
|
||||
async def on_raw_message_edit(self, payload):
|
||||
message_id = payload.message_id
|
||||
@ -190,7 +190,7 @@ class Titan(discord.AutoShardedClient):
|
||||
|
||||
async def raw_bulk_message_delete(self, payload):
|
||||
message_ids = payload.message_ids
|
||||
channel_ids = payload.channel_id
|
||||
channel_id = payload.channel_id
|
||||
await asyncio.sleep(1)
|
||||
for msgid in message_ids:
|
||||
msgid = int(msgid)
|
||||
|
@ -5,7 +5,6 @@ import datetime
|
||||
|
||||
db = Gino()
|
||||
|
||||
from titanembeds.database.guilds import Guilds
|
||||
from titanembeds.database.unauthenticated_users import UnauthenticatedUsers
|
||||
from titanembeds.database.unauthenticated_bans import UnauthenticatedBans
|
||||
|
||||
@ -17,57 +16,6 @@ class DatabaseInterface(object):
|
||||
|
||||
async def connect(self, dburi):
|
||||
await db.set_bind(dburi)
|
||||
|
||||
async def update_guild(self, guild):
|
||||
if guild.me.guild_permissions.manage_webhooks:
|
||||
try:
|
||||
server_webhooks = await guild.webhooks()
|
||||
except:
|
||||
server_webhooks = []
|
||||
else:
|
||||
server_webhooks = []
|
||||
gui = await Guilds.get(guild.id)
|
||||
if not gui:
|
||||
await Guilds.create(
|
||||
guild_id = int(guild.id),
|
||||
name = guild.name,
|
||||
unauth_users = True,
|
||||
visitor_view = False,
|
||||
webhook_messages = False,
|
||||
guest_icon = None,
|
||||
chat_links = True,
|
||||
bracket_links = True,
|
||||
unauth_captcha = True,
|
||||
mentions_limit = -1,
|
||||
roles = json.dumps(get_roles_list(guild.roles)),
|
||||
channels = json.dumps(get_channels_list(guild.channels)),
|
||||
webhooks = json.dumps(get_webhooks_list(server_webhooks)),
|
||||
emojis = json.dumps(get_emojis_list(guild.emojis)),
|
||||
owner_id = int(guild.owner_id),
|
||||
icon = guild.icon
|
||||
)
|
||||
else:
|
||||
await gui.update(
|
||||
name = guild.name,
|
||||
roles = json.dumps(get_roles_list(guild.roles)),
|
||||
channels = json.dumps(get_channels_list(guild.channels)),
|
||||
webhooks = json.dumps(get_webhooks_list(server_webhooks)),
|
||||
emojis = json.dumps(get_emojis_list(guild.emojis)),
|
||||
owner_id = int(guild.owner_id),
|
||||
icon = guild.icon
|
||||
).apply()
|
||||
|
||||
async def remove_unused_guilds(self, guilds):
|
||||
dbguilds = await Guilds.query.gino.all()
|
||||
for guild in dbguilds:
|
||||
disguild = discord.utils.get(guilds, id=guild.guild_id)
|
||||
if not disguild:
|
||||
await Messages.delete.where(Messages.guild_id == int(guild.guild_id)).gino.status()
|
||||
|
||||
async def remove_guild(self, guild):
|
||||
gui = await Guilds.get(int(guild.id))
|
||||
if gui:
|
||||
await gui.delete()
|
||||
|
||||
async def ban_unauth_user_by_query(self, guild_id, placer_id, username, discriminator):
|
||||
dbuser = None
|
||||
|
@ -1,26 +0,0 @@
|
||||
from titanembeds.database import db
|
||||
|
||||
class Guilds(db.Model):
|
||||
__tablename__ = "guilds"
|
||||
guild_id = db.Column(db.BigInteger, primary_key=True) # Discord guild id
|
||||
name = db.Column(db.String(255)) # Name
|
||||
unauth_users = db.Column(db.Boolean()) # If allowed unauth users
|
||||
visitor_view = db.Column(db.Boolean()) # If users are automatically "signed in" and can view chat
|
||||
webhook_messages = db.Column(db.Boolean()) # Use webhooks to send messages instead of the bot
|
||||
guest_icon = db.Column(db.String(255), default=None) # Guest icon url, None if unset
|
||||
chat_links = db.Column(db.Boolean()) # If users can post links
|
||||
bracket_links = db.Column(db.Boolean()) # If appending brackets to links to prevent embed
|
||||
unauth_captcha = db.Column(db.Boolean(), nullable=False, server_default="1") # Enforce captcha on guest users
|
||||
mentions_limit = db.Column(db.Integer) # If there is a limit on the number of mentions in a msg
|
||||
roles = db.Column(db.Text().with_variant(db.Text(length=4294967295), 'mysql')) # Guild Roles
|
||||
channels = db.Column(db.Text().with_variant(db.Text(length=4294967295), 'mysql'))# Guild channels
|
||||
webhooks = db.Column(db.Text().with_variant(db.Text(length=4294967295), 'mysql'))# Guild webhooks
|
||||
emojis = db.Column(db.Text().with_variant(db.Text(length=4294967295), 'mysql')) # Guild Emojis
|
||||
owner_id = db.Column(db.BigInteger) # Snowflake of the owner
|
||||
icon = db.Column(db.String(255)) # The icon string, null if none
|
||||
invite_link = db.Column(db.String(255)) # Custom Discord Invite Link
|
||||
post_timeout = db.Column(db.Integer, nullable=False, server_default="5") # Seconds to elapse before another message can be posted from the widget
|
||||
max_message_length = db.Column(db.Integer, nullable=False, server_default="300") # Chars length the message should be before being rejected by the server
|
||||
banned_words_enabled = db.Column(db.Boolean(), nullable=False, server_default="0") # If banned words are enforced
|
||||
banned_words_global_included = db.Column(db.Boolean(), nullable=False, server_default="0") # Add global banned words to the list
|
||||
banned_words = db.Column(db.Text(), nullable=False, server_default="[]") # JSON list of strings to block from sending
|
@ -1,4 +1,4 @@
|
||||
from titanembeds.utils import get_formatted_message, get_formatted_user
|
||||
from titanembeds.utils import get_formatted_message, get_formatted_user, get_formatted_guild
|
||||
from urllib.parse import urlparse
|
||||
import asyncio_redis
|
||||
import json
|
||||
@ -70,6 +70,8 @@ class RedisQueue:
|
||||
members = await self.connection.smembers(key)
|
||||
for member in members:
|
||||
the_member = await member
|
||||
if not the_member:
|
||||
continue
|
||||
parsed = json.loads(the_member)
|
||||
if re.match(str(dict_value_pattern), str(parsed[dict_key])):
|
||||
unformatted_item = the_member
|
||||
@ -94,7 +96,7 @@ class RedisQueue:
|
||||
messages = []
|
||||
async for message in channel.history(limit=50):
|
||||
formatted = get_formatted_message(message)
|
||||
messages.append(json.dumps(formatted))
|
||||
messages.append(json.dumps(formatted, separators=(',', ':')))
|
||||
await self.connection.sadd(key, [""] + messages)
|
||||
|
||||
async def push_message(self, message):
|
||||
@ -103,7 +105,7 @@ class RedisQueue:
|
||||
exists = await self.connection.exists(key)
|
||||
if exists:
|
||||
message = get_formatted_message(message)
|
||||
await self.connection.sadd(key, [json.dumps(message)])
|
||||
await self.connection.sadd(key, [json.dumps(message, separators=(',', ':'))])
|
||||
|
||||
async def delete_message(self, message):
|
||||
if message.guild:
|
||||
@ -125,7 +127,7 @@ class RedisQueue:
|
||||
return
|
||||
user = get_formatted_user(member)
|
||||
await self.enforce_expiring_key(key)
|
||||
await self.connection.set(key, json.dumps(user))
|
||||
await self.connection.set(key, json.dumps(user, separators=(',', ':')))
|
||||
|
||||
async def on_get_guild_member_named(self, key, params):
|
||||
guild = self.bot.get_guild(int(params["guild_id"]))
|
||||
@ -141,7 +143,7 @@ class RedisQueue:
|
||||
result = ""
|
||||
else:
|
||||
result_id = result.id
|
||||
result = json.dumps({"user_id": result_id})
|
||||
result = json.dumps({"user_id": result_id}, separators=(',', ':'))
|
||||
get_guild_member_key = "Queue/guilds/{}/members/{}".format(guild.id, result_id)
|
||||
get_guild_member_param = {"guild_id": guild.id, "user_id": result_id}
|
||||
await self.on_get_guild_member(get_guild_member_key, get_guild_member_param)
|
||||
@ -152,7 +154,7 @@ class RedisQueue:
|
||||
members = guild.members
|
||||
member_ids = []
|
||||
for member in members:
|
||||
member_ids.append(json.dumps({"user_id": member.id}))
|
||||
member_ids.append(json.dumps({"user_id": member.id}, separators=(',', ':')))
|
||||
get_guild_member_key = "Queue/guilds/{}/members/{}".format(guild.id, member.id)
|
||||
get_guild_member_param = {"guild_id": guild.id, "user_id": member.id}
|
||||
await self.on_get_guild_member(get_guild_member_key, get_guild_member_param)
|
||||
@ -162,14 +164,14 @@ class RedisQueue:
|
||||
key = "Queue/guilds/{}/members".format(member.guild.id)
|
||||
exists = await self.connection.exists(key)
|
||||
if exists:
|
||||
await self.connection.sadd(key, [json.dumps({"user_id": member.id})])
|
||||
await self.connection.sadd(key, [json.dumps({"user_id": member.id}, separators=(',', ':'))])
|
||||
|
||||
async def remove_member(self, member, guild=None):
|
||||
if not guild:
|
||||
guild = member.guild
|
||||
guild_member_key = "Queue/guilds/{}/members/{}".format(guild.id, member.id)
|
||||
list_members_key = "Queue/guilds/{}/members".format(guild.id)
|
||||
await self.connection.srem(list_members_key, [json.dumps({"user_id": member.id})])
|
||||
await self.connection.srem(list_members_key, [json.dumps({"user_id": member.id}, separators=(',', ':'))])
|
||||
await self.connection.delete([guild_member_key])
|
||||
|
||||
async def update_member(self, member):
|
||||
@ -177,4 +179,32 @@ class RedisQueue:
|
||||
await self.add_member(member)
|
||||
|
||||
async def ban_member(self, guild, user):
|
||||
await self.remove_member(user, guild)
|
||||
await self.remove_member(user, guild)
|
||||
|
||||
async def on_get_guild(self, key, params):
|
||||
guild = self.bot.get_guild(int(params["guild_id"]))
|
||||
if not guild:
|
||||
await self.connection.set(key, "")
|
||||
return
|
||||
if guild.me.guild_permissions.manage_webhooks:
|
||||
try:
|
||||
server_webhooks = await guild.webhooks()
|
||||
except:
|
||||
server_webhooks = []
|
||||
else:
|
||||
server_webhooks = []
|
||||
guild_fmtted = get_formatted_guild(guild, server_webhooks)
|
||||
await self.connection.set(key, json.dumps(guild_fmtted, separators=(',', ':')))
|
||||
await self.enforce_expiring_key(key)
|
||||
|
||||
async def delete_guild(self, guild):
|
||||
key = "Queue/guilds/{}".format(guild.id)
|
||||
await self.connection.delete([key])
|
||||
|
||||
async def update_guild(self, guild):
|
||||
key = "Queue/guilds/{}".format(guild.id)
|
||||
exists = await self.connection.exists(key)
|
||||
if exists:
|
||||
await self.delete_guild(guild)
|
||||
await self.on_get_guild(key, {"guild_id": guild.id})
|
||||
await self.enforce_expiring_key(key)
|
@ -100,12 +100,17 @@ def get_formatted_emojis(emojis):
|
||||
})
|
||||
return emotes
|
||||
|
||||
def get_formatted_guild(guild):
|
||||
def get_formatted_guild(guild, webhooks=[]):
|
||||
guil = {
|
||||
"id": str(guild.id),
|
||||
"name": guild.name,
|
||||
"icon": guild.icon,
|
||||
"icon_url": guild.icon_url,
|
||||
"owner_id": guild.owner_id,
|
||||
"roles": get_roles_list(guild.roles),
|
||||
"channels": get_channels_list(guild.channels),
|
||||
"webhooks": get_webhooks_list(webhooks),
|
||||
"emojis": get_emojis_list(guild.emojis)
|
||||
}
|
||||
return guil
|
||||
|
||||
|
Reference in New Issue
Block a user