from titanembeds.database import db, get_guild_member from sqlalchemy import cast import json class Messages(db.Model): __tablename__ = "messages" id = db.Column(db.Integer, primary_key=True) # Auto incremented id guild_id = db.Column(db.String(255), nullable=False) # Discord guild id channel_id = db.Column(db.String(255), nullable=False) # Channel id message_id = db.Column(db.String(255), nullable=False) # Message snowflake 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 def __init__(self, guild_id, channel_id, message_id, content, author, timestamp, edited_timestamp, mentions, attachments): 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 def __repr__(self): return ''.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(cast(Messages.channel_id, db.BigInteger) == int(channel_id)).filter(cast(Messages.message_id, db.BigInteger) > after_snowflake).order_by(Messages.timestamp.desc()).limit(50) msgs = [] snowflakes = [] for x in q: if x.message_id in snowflakes: continue snowflakes.append(x.message_id) message = { "attachments": json.loads(x.attachments), "timestamp": x.timestamp, "id": x.message_id, "edited_timestamp": x.edited_timestamp, "author": json.loads(x.author), "content": x.content, "channel_id": x.channel_id, "mentions": json.loads(x.mentions) } member = get_guild_member(guild_id, message["author"]["id"]) message["author"]["nickname"] = None if member: message["author"]["nickname"] = member.nickname for mention in message["mentions"]: author = get_guild_member(guild_id, mention["id"]) mention["nickname"] = None if author: mention["nickname"] = author.nickname msgs.append(message) return msgs