mirror of
https://github.com/TitanEmbeds/Titan.git
synced 2024-11-15 02:21:21 +01:00
Messages database
This commit is contained in:
parent
7762862623
commit
ba7b47f193
@ -55,3 +55,10 @@ class Titan(discord.Client):
|
|||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
await self.logout()
|
await self.logout()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
async def on_message(self, message):
|
||||||
|
await self.database.push_message(message)
|
||||||
|
# TODO: Will add command handler + ban/kick command
|
||||||
|
|
||||||
|
async def on_message_edit(self, message_before, message_after):
|
||||||
|
await self.database.update_message(message_after)
|
||||||
|
@ -5,9 +5,12 @@ from sqlalchemy.engine import Engine, create_engine
|
|||||||
from sqlalchemy.orm import sessionmaker, Session
|
from sqlalchemy.orm import sessionmaker, Session
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|
||||||
from titanembeds.database.guilds import Guilds
|
from titanembeds.database.guilds import Guilds
|
||||||
|
from titanembeds.database.messages import Messages
|
||||||
|
|
||||||
class DatabaseInterface(object):
|
class DatabaseInterface(object):
|
||||||
# Courtesy of https://github.com/SunDwarf/Jokusoramame
|
# Courtesy of https://github.com/SunDwarf/Jokusoramame
|
||||||
@ -33,3 +36,40 @@ class DatabaseInterface(object):
|
|||||||
raise
|
raise
|
||||||
finally:
|
finally:
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
|
async def push_message(self, message):
|
||||||
|
if message.server:
|
||||||
|
async with threadpool():
|
||||||
|
with self.get_session() as session:
|
||||||
|
edit_ts = message.edited_timestamp
|
||||||
|
if not edit_ts:
|
||||||
|
edit_ts = None
|
||||||
|
else:
|
||||||
|
edit_ts = str(edit_ts)
|
||||||
|
|
||||||
|
msg = Messages(
|
||||||
|
message.server.id,
|
||||||
|
message.channel.id,
|
||||||
|
message.id,
|
||||||
|
message.content,
|
||||||
|
str(message.timestamp),
|
||||||
|
edit_ts,
|
||||||
|
json.dumps(message.mentions),
|
||||||
|
json.dumps(message.attachments)
|
||||||
|
)
|
||||||
|
session.add(msg)
|
||||||
|
session.commit()
|
||||||
|
|
||||||
|
async def update_message(self, message):
|
||||||
|
if message.server:
|
||||||
|
async with threadpool():
|
||||||
|
with self.get_session() as session:
|
||||||
|
msg = session.query(Messages) \
|
||||||
|
.filter(Messages.guild_id == message.server.id) \
|
||||||
|
.filter(Messages.channel_id == message.channel.id) \
|
||||||
|
.filter(Messages.message_id == message.id).first()
|
||||||
|
msg.content = message.content
|
||||||
|
msg.edited_timestamp = message.edited_timestamp
|
||||||
|
msg.mentions = json.dumps(message.mentions)
|
||||||
|
msg.attachments = json.dumps(message.attachments)
|
||||||
|
session.commit()
|
||||||
|
26
discordbot/titanembeds/database/messages.py
Normal file
26
discordbot/titanembeds/database/messages.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
from titanembeds.database import db, Base
|
||||||
|
|
||||||
|
class Messages(Base):
|
||||||
|
__tablename__ = "messages"
|
||||||
|
id = db.Column(db.Integer, primary_key=True) # Auto incremented id
|
||||||
|
guild_id = db.Column(db.String(255)) # Discord guild id
|
||||||
|
channel_id = db.Column(db.String(255)) # Channel id
|
||||||
|
message_id = db.Column(db.String(255)) # Message snowflake
|
||||||
|
content = db.Column(db.Text()) # Message contents
|
||||||
|
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
|
||||||
|
|
||||||
|
def __init__(self, guild_id, channel_id, message_id, content, timestamp, edited_timestamp, mentions, attachments):
|
||||||
|
self.guild_id = guild_id
|
||||||
|
self.channel_id = channel_id
|
||||||
|
self.message_id = message_id
|
||||||
|
self.content = content
|
||||||
|
self.timestamp = timestamp
|
||||||
|
self.edited_timestamp = edited_timestamp
|
||||||
|
self.mentions = mentions
|
||||||
|
self.attachments = attachments
|
||||||
|
|
||||||
|
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)
|
Loading…
Reference in New Issue
Block a user