Reimplement remove message table

This commit is contained in:
Jeremy Zhang
2018-07-16 23:47:25 +00:00
parent 89b12d06ab
commit 56ba9bc127
7 changed files with 41 additions and 139 deletions

View File

@ -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 ###

View File

@ -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.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

View File

@ -7,7 +7,6 @@ from .unauthenticated_users import UnauthenticatedUsers
from .unauthenticated_bans import UnauthenticatedBans
from .authenticated_users import AuthenticatedUsers
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 .user_css import UserCSS
from .administrators import Administrators, get_administrators_list

View File

@ -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