mirror of
https://github.com/TitanEmbeds/Titan.git
synced 2024-12-25 06:27:03 +01:00
Remove messages table
This commit is contained in:
parent
bc129289fc
commit
6d6b390431
@ -81,7 +81,6 @@ class Titan(discord.AutoShardedClient):
|
|||||||
|
|
||||||
async def on_message(self, message):
|
async def on_message(self, message):
|
||||||
await self.socketio.on_message(message)
|
await self.socketio.on_message(message)
|
||||||
await self.database.push_message(message)
|
|
||||||
await self.redisqueue.push_message(message)
|
await self.redisqueue.push_message(message)
|
||||||
|
|
||||||
msg_arr = message.content.split() # split the message
|
msg_arr = message.content.split() # split the message
|
||||||
@ -96,13 +95,11 @@ class Titan(discord.AutoShardedClient):
|
|||||||
await getattr(self.command, msg_cmd)(message) #actually run cmd, passing in msg obj
|
await getattr(self.command, msg_cmd)(message) #actually run cmd, passing in msg obj
|
||||||
|
|
||||||
async def on_message_edit(self, message_before, message_after):
|
async def on_message_edit(self, message_before, message_after):
|
||||||
await self.database.update_message(message_after)
|
|
||||||
await self.redisqueue.update_message(message_after)
|
await self.redisqueue.update_message(message_after)
|
||||||
await self.socketio.on_message_update(message_after)
|
await self.socketio.on_message_update(message_after)
|
||||||
|
|
||||||
async def on_message_delete(self, message):
|
async def on_message_delete(self, message):
|
||||||
self.delete_list.append(message.id)
|
self.delete_list.append(message.id)
|
||||||
await self.database.delete_message(message)
|
|
||||||
await self.redisqueue.delete_message(message)
|
await self.redisqueue.delete_message(message)
|
||||||
await self.socketio.on_message_delete(message)
|
await self.socketio.on_message_delete(message)
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ import datetime
|
|||||||
db = Gino()
|
db = Gino()
|
||||||
|
|
||||||
from titanembeds.database.guilds import Guilds
|
from titanembeds.database.guilds import Guilds
|
||||||
from titanembeds.database.messages import Messages
|
|
||||||
from titanembeds.database.guild_members import GuildMembers
|
from titanembeds.database.guild_members import GuildMembers
|
||||||
from titanembeds.database.unauthenticated_users import UnauthenticatedUsers
|
from titanembeds.database.unauthenticated_users import UnauthenticatedUsers
|
||||||
from titanembeds.database.unauthenticated_bans import UnauthenticatedBans
|
from titanembeds.database.unauthenticated_bans import UnauthenticatedBans
|
||||||
@ -20,37 +19,6 @@ class DatabaseInterface(object):
|
|||||||
async def connect(self, dburi):
|
async def connect(self, dburi):
|
||||||
await db.set_bind(dburi)
|
await db.set_bind(dburi)
|
||||||
|
|
||||||
async def push_message(self, message):
|
|
||||||
if message.guild:
|
|
||||||
await Messages.create(
|
|
||||||
message_id = int(message.id),
|
|
||||||
guild_id = int(message.guild.id),
|
|
||||||
channel_id = int(message.channel.id),
|
|
||||||
content = message.content,
|
|
||||||
author = json.dumps(get_message_author(message)),
|
|
||||||
timestamp = message.created_at,
|
|
||||||
edited_timestamp = message.edited_at,
|
|
||||||
mentions = json.dumps(get_message_mentions(message.mentions)),
|
|
||||||
attachments = json.dumps(get_attachments_list(message.attachments)),
|
|
||||||
embeds = json.dumps(get_embeds_list(message.embeds))
|
|
||||||
)
|
|
||||||
|
|
||||||
async def update_message(self, message):
|
|
||||||
if message.guild:
|
|
||||||
await Messages.update.values(
|
|
||||||
content = message.content,
|
|
||||||
timestamp = message.created_at,
|
|
||||||
edited_timestamp = message.edited_at,
|
|
||||||
mentions = json.dumps(get_message_mentions(message.mentions)),
|
|
||||||
attachments = json.dumps(get_attachments_list(message.attachments)),
|
|
||||||
embeds = json.dumps(get_embeds_list(message.embeds)),
|
|
||||||
author = json.dumps(get_message_author(message))
|
|
||||||
).where(Messages.message_id == int(message.id)).gino.status()
|
|
||||||
|
|
||||||
async def delete_message(self, message):
|
|
||||||
if message.guild:
|
|
||||||
await Messages.delete.where(Messages.message_id == int(message.id)).gino.status()
|
|
||||||
|
|
||||||
async def update_guild(self, guild):
|
async def update_guild(self, guild):
|
||||||
if guild.me.guild_permissions.manage_webhooks:
|
if guild.me.guild_permissions.manage_webhooks:
|
||||||
try:
|
try:
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
from titanembeds.database import db
|
|
||||||
|
|
||||||
class Messages(db.Model):
|
|
||||||
__tablename__ = "messages"
|
|
||||||
message_id = db.Column(db.BigInteger, primary_key=True) # Message snowflake
|
|
||||||
guild_id = db.Column(db.BigInteger) # Discord guild id
|
|
||||||
channel_id = db.Column(db.BigInteger) # Channel id
|
|
||||||
content = db.Column(db.Text()) # Message contents
|
|
||||||
author = db.Column(db.Text()) # Author json
|
|
||||||
timestamp = db.Column(db.TIMESTAMP) # Timestamp of when content is created
|
|
||||||
edited_timestamp = db.Column(db.TIMESTAMP) # Timestamp of when content is edited
|
|
||||||
mentions = db.Column(db.Text()) # Mentions serialized
|
|
||||||
attachments = db.Column(db.Text()) # serialized attachments
|
|
||||||
embeds = db.Column(db.Text().with_variant(db.Text(length=4294967295), 'mysql')) # message embeds
|
|
@ -1,4 +1,4 @@
|
|||||||
from titanembeds.utils import get_formatted_message
|
from titanembeds.utils import get_formatted_message, get_formatted_user
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
import asyncio_redis
|
import asyncio_redis
|
||||||
import json
|
import json
|
||||||
@ -108,3 +108,12 @@ class RedisQueue:
|
|||||||
async def update_message(self, message):
|
async def update_message(self, message):
|
||||||
await self.delete_message(message)
|
await self.delete_message(message)
|
||||||
await self.push_message(message)
|
await self.push_message(message)
|
||||||
|
|
||||||
|
async def on_get_guild_member(self, key, params):
|
||||||
|
member = self.bot.get_guild(int(params["guild_id"])).get_member(int(params["user_id"]))
|
||||||
|
if not member:
|
||||||
|
await self.connection.set(key, "")
|
||||||
|
return
|
||||||
|
await self.connection.delete([key])
|
||||||
|
user = get_formatted_user(member)
|
||||||
|
await self.connection.set(key, json.dumps(user))
|
@ -50,6 +50,7 @@ def get_formatted_user(user):
|
|||||||
"status": str(user.status),
|
"status": str(user.status),
|
||||||
"username": user.name,
|
"username": user.name,
|
||||||
"nick": None,
|
"nick": None,
|
||||||
|
"bot": user.bot
|
||||||
}
|
}
|
||||||
if userobj["color"] == "000000":
|
if userobj["color"] == "000000":
|
||||||
userobj["color"] = None
|
userobj["color"] = None
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
"""Remove messages table for good
|
||||||
|
|
||||||
|
Revision ID: 52271b243ba2
|
||||||
|
Revises: 8e806bcb2228
|
||||||
|
Create Date: 2018-07-16 23:33:31.600454
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '52271b243ba2'
|
||||||
|
down_revision = '8e806bcb2228'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy.dialects import postgresql
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.drop_table('messages')
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.create_table('messages',
|
||||||
|
sa.Column('guild_id', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||||
|
sa.Column('channel_id', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||||
|
sa.Column('message_id', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||||
|
sa.Column('content', sa.TEXT(), autoincrement=False, nullable=False),
|
||||||
|
sa.Column('author', sa.TEXT(), autoincrement=False, nullable=False),
|
||||||
|
sa.Column('timestamp', postgresql.TIMESTAMP(), autoincrement=False, nullable=False),
|
||||||
|
sa.Column('edited_timestamp', postgresql.TIMESTAMP(), autoincrement=False, nullable=True),
|
||||||
|
sa.Column('mentions', sa.TEXT(), autoincrement=False, nullable=True),
|
||||||
|
sa.Column('attachments', sa.TEXT(), autoincrement=False, nullable=True),
|
||||||
|
sa.Column('embeds', sa.TEXT(), autoincrement=False, nullable=True),
|
||||||
|
sa.PrimaryKeyConstraint('message_id', name='messages_pkey')
|
||||||
|
)
|
||||||
|
# ### end Alembic commands ###
|
@ -1,4 +1,4 @@
|
|||||||
from titanembeds.database import db, Guilds, UnauthenticatedUsers, UnauthenticatedBans, AuthenticatedUsers, GuildMembers, Messages, list_all_guild_members, get_guild_member, get_administrators_list, get_badges, DiscordBotsOrgTransactions
|
from titanembeds.database import db, Guilds, UnauthenticatedUsers, UnauthenticatedBans, AuthenticatedUsers, GuildMembers, list_all_guild_members, get_guild_member, get_administrators_list, get_badges, DiscordBotsOrgTransactions
|
||||||
from titanembeds.decorators import valid_session_required, discord_users_only, abort_if_guild_disabled
|
from titanembeds.decorators import valid_session_required, discord_users_only, abort_if_guild_disabled
|
||||||
from titanembeds.utils import check_guild_existance, guild_accepts_visitors, guild_query_unauth_users_bool, get_client_ipaddr, discord_api, rate_limiter, channel_ratelimit_key, guild_ratelimit_key, user_unauthenticated, checkUserRevoke, checkUserBanned, update_user_status, check_user_in_guild, get_guild_channels, guild_webhooks_enabled, guild_unauthcaptcha_enabled, get_member_roles, get_online_embed_user_keys, redis_store, redisqueue
|
from titanembeds.utils import check_guild_existance, guild_accepts_visitors, guild_query_unauth_users_bool, get_client_ipaddr, discord_api, rate_limiter, channel_ratelimit_key, guild_ratelimit_key, user_unauthenticated, checkUserRevoke, checkUserBanned, update_user_status, check_user_in_guild, get_guild_channels, guild_webhooks_enabled, guild_unauthcaptcha_enabled, get_member_roles, get_online_embed_user_keys, redis_store, redisqueue
|
||||||
from titanembeds.oauth import user_has_permission, generate_avatar_url, check_user_can_administrate_guild
|
from titanembeds.oauth import user_has_permission, generate_avatar_url, check_user_can_administrate_guild
|
||||||
|
@ -7,7 +7,6 @@ from .unauthenticated_users import UnauthenticatedUsers
|
|||||||
from .unauthenticated_bans import UnauthenticatedBans
|
from .unauthenticated_bans import UnauthenticatedBans
|
||||||
from .authenticated_users import AuthenticatedUsers
|
from .authenticated_users import AuthenticatedUsers
|
||||||
from .guild_members import GuildMembers, list_all_guild_members, get_guild_member
|
from .guild_members import GuildMembers, list_all_guild_members, get_guild_member
|
||||||
from .messages import Messages, get_channel_messages
|
|
||||||
from .cosmetics import Cosmetics, set_badges, get_badges, add_badge, remove_badge
|
from .cosmetics import Cosmetics, set_badges, get_badges, add_badge, remove_badge
|
||||||
from .user_css import UserCSS
|
from .user_css import UserCSS
|
||||||
from .administrators import Administrators, get_administrators_list
|
from .administrators import Administrators, get_administrators_list
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
from titanembeds.database import db, get_guild_member
|
|
||||||
from sqlalchemy import cast
|
|
||||||
import json
|
|
||||||
|
|
||||||
class Messages(db.Model):
|
|
||||||
__tablename__ = "messages"
|
|
||||||
message_id = db.Column(db.BigInteger, nullable=False, primary_key=True) # Message snowflake
|
|
||||||
guild_id = db.Column(db.BigInteger, nullable=False) # Discord guild id
|
|
||||||
channel_id = db.Column(db.BigInteger, nullable=False) # Channel id
|
|
||||||
content = db.Column(db.Text(), nullable=False) # Message contents
|
|
||||||
author = db.Column(db.Text(), nullable=False) # Author
|
|
||||||
timestamp = db.Column(db.TIMESTAMP, nullable=False) # Timestamp of when content is created
|
|
||||||
edited_timestamp = db.Column(db.TIMESTAMP) # Timestamp of when content is edited
|
|
||||||
mentions = db.Column(db.Text()) # Mentions serialized
|
|
||||||
attachments = db.Column(db.Text()) # serialized attachments
|
|
||||||
embeds = db.Column(db.Text().with_variant(db.Text(length=4294967295), 'mysql')) # message embeds
|
|
||||||
|
|
||||||
def __init__(self, guild_id, channel_id, message_id, content, author, timestamp, edited_timestamp, mentions, attachments, embeds):
|
|
||||||
self.guild_id = guild_id
|
|
||||||
self.channel_id = channel_id
|
|
||||||
self.message_id = message_id
|
|
||||||
self.content = content
|
|
||||||
self.author = author
|
|
||||||
self.timestamp = timestamp
|
|
||||||
self.edited_timestamp = edited_timestamp
|
|
||||||
self.mentions = mentions
|
|
||||||
self.attachments = attachments
|
|
||||||
self.embeds = embeds
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return '<Messages {0} {1} {2} {3} {4}>'.format(self.id, self.guild_id, self.guild_id, self.channel_id, self.message_id)
|
|
||||||
|
|
||||||
def get_channel_messages(guild_id, channel_id, after_snowflake=None):
|
|
||||||
if not after_snowflake:
|
|
||||||
q = db.session.query(Messages).filter(Messages.channel_id == channel_id).order_by(Messages.timestamp.desc()).limit(50)
|
|
||||||
else:
|
|
||||||
q = db.session.query(Messages).filter(Messages.channel_id == channel_id).filter(Messages.message_id > after_snowflake).order_by(Messages.timestamp.desc()).limit(50)
|
|
||||||
msgs = []
|
|
||||||
snowflakes = []
|
|
||||||
guild_members = {}
|
|
||||||
for x in q:
|
|
||||||
if x.message_id in snowflakes:
|
|
||||||
continue
|
|
||||||
snowflakes.append(x.message_id)
|
|
||||||
embeds = x.embeds
|
|
||||||
if not embeds:
|
|
||||||
embeds = "[]"
|
|
||||||
message = {
|
|
||||||
"attachments": json.loads(x.attachments),
|
|
||||||
"timestamp": x.timestamp,
|
|
||||||
"id": str(x.message_id),
|
|
||||||
"edited_timestamp": x.edited_timestamp,
|
|
||||||
"author": json.loads(x.author),
|
|
||||||
"content": x.content,
|
|
||||||
"channel_id": str(x.channel_id),
|
|
||||||
"mentions": json.loads(x.mentions),
|
|
||||||
"embeds": json.loads(embeds),
|
|
||||||
}
|
|
||||||
if message["author"]["id"] not in guild_members:
|
|
||||||
member = get_guild_member(guild_id, message["author"]["id"])
|
|
||||||
guild_members[message["author"]["id"]] = member
|
|
||||||
else:
|
|
||||||
member = guild_members[message["author"]["id"]]
|
|
||||||
message["author"]["nickname"] = None
|
|
||||||
if member:
|
|
||||||
message["author"]["nickname"] = member.nickname
|
|
||||||
message["author"]["avatar"] = member.avatar
|
|
||||||
message["author"]["discriminator"] = member.discriminator
|
|
||||||
message["author"]["username"] = member.username
|
|
||||||
for mention in message["mentions"]:
|
|
||||||
if mention["id"] not in guild_members:
|
|
||||||
author = get_guild_member(guild_id, mention["id"])
|
|
||||||
guild_members[mention["id"]] = author
|
|
||||||
else:
|
|
||||||
author = guild_members[mention["id"]]
|
|
||||||
mention["nickname"] = None
|
|
||||||
if author:
|
|
||||||
mention["nickname"] = author.nickname
|
|
||||||
mention["avatar"] = author.avatar
|
|
||||||
mention["username"] = author.username
|
|
||||||
mention["discriminator"] = author.discriminator
|
|
||||||
msgs.append(message)
|
|
||||||
return msgs
|
|
@ -1,5 +1,4 @@
|
|||||||
from titanembeds.utils import redis_store
|
from titanembeds.utils import redis_store
|
||||||
from titanembeds.database import get_guild_member
|
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@ -16,14 +15,14 @@ class RedisQueue:
|
|||||||
"params": params
|
"params": params
|
||||||
}
|
}
|
||||||
loop_count = 0
|
loop_count = 0
|
||||||
while not data and loop_count < 10:
|
while (not data and data != "") and loop_count < 50:
|
||||||
if loop_count % 5 == 0:
|
if loop_count % 25 == 0:
|
||||||
redis_store.publish("discord-api-req", json.dumps(payload))
|
redis_store.publish("discord-api-req", json.dumps(payload))
|
||||||
time.sleep(0.5)
|
time.sleep(0.1)
|
||||||
data = self._get(key, data_type)
|
data = self._get(key, data_type)
|
||||||
loop_count += 1
|
loop_count += 1
|
||||||
redis_store.expire(key, 60 * 5)
|
redis_store.expire(key, 60 * 5)
|
||||||
if data == None:
|
if data == None or data == "":
|
||||||
return None
|
return None
|
||||||
if data_type == "set":
|
if data_type == "set":
|
||||||
data = list(data)
|
data = list(data)
|
||||||
@ -61,28 +60,33 @@ class RedisQueue:
|
|||||||
"embeds": x["embeds"],
|
"embeds": x["embeds"],
|
||||||
}
|
}
|
||||||
if message["author"]["id"] not in guild_members:
|
if message["author"]["id"] not in guild_members:
|
||||||
member = get_guild_member(guild_id, message["author"]["id"])
|
member = self.get_guild_member(guild_id, message["author"]["id"])
|
||||||
guild_members[message["author"]["id"]] = member
|
guild_members[message["author"]["id"]] = member
|
||||||
else:
|
else:
|
||||||
member = guild_members[message["author"]["id"]]
|
member = guild_members[message["author"]["id"]]
|
||||||
message["author"]["nickname"] = None
|
message["author"]["nickname"] = None
|
||||||
if member:
|
if member:
|
||||||
message["author"]["nickname"] = member.nickname
|
message["author"]["nickname"] = member["nick"]
|
||||||
message["author"]["avatar"] = member.avatar
|
message["author"]["avatar"] = member["avatar"]
|
||||||
message["author"]["discriminator"] = member.discriminator
|
message["author"]["discriminator"] = member["discriminator"]
|
||||||
message["author"]["username"] = member.username
|
message["author"]["username"] = member["username"]
|
||||||
for mention in message["mentions"]:
|
for mention in message["mentions"]:
|
||||||
if mention["id"] not in guild_members:
|
if mention["id"] not in guild_members:
|
||||||
author = get_guild_member(guild_id, mention["id"])
|
author = self.get_guild_member(guild_id, mention["id"])
|
||||||
guild_members[mention["id"]] = author
|
guild_members[mention["id"]] = author
|
||||||
else:
|
else:
|
||||||
author = guild_members[mention["id"]]
|
author = guild_members[mention["id"]]
|
||||||
mention["nickname"] = None
|
mention["nickname"] = None
|
||||||
if author:
|
if author:
|
||||||
mention["nickname"] = author.nickname
|
mention["nickname"] = author["nick"]
|
||||||
mention["avatar"] = author.avatar
|
mention["avatar"] = author["avatar"]
|
||||||
mention["username"] = author.username
|
mention["username"] = author["username"]
|
||||||
mention["discriminator"] = author.discriminator
|
mention["discriminator"] = author["discriminator"]
|
||||||
msgs.append(message)
|
msgs.append(message)
|
||||||
sorted_msgs = sorted(msgs, key=lambda k: k['id'], reverse=True)
|
sorted_msgs = sorted(msgs, key=lambda k: k['id'], reverse=True)
|
||||||
return sorted_msgs
|
return sorted_msgs
|
||||||
|
|
||||||
|
def get_guild_member(self, guild_id, user_id):
|
||||||
|
key = "/guilds/{}/members/{}".format(guild_id, user_id)
|
||||||
|
q = self.get(key, "get_guild_member", {"guild_id": guild_id, "user_id": user_id})
|
||||||
|
return q
|
Loading…
Reference in New Issue
Block a user