Reorganize Message and SessionView into basic_types
This commit is contained in:
parent
9b0195aa72
commit
dd4b5144a9
4 changed files with 170 additions and 180 deletions
|
|
@ -1,10 +1 @@
|
|||
from .bot import Bot
|
||||
from .botmanager import BotManager
|
||||
from .callbacks import Callbacks
|
||||
from .connection import Connection
|
||||
from .exceptions import *
|
||||
from .session import Session
|
||||
from .message import Message
|
||||
from .sessions import Sessions
|
||||
from .messages import Messages
|
||||
from .room import Room
|
||||
from .basic_types import Message, SessionView
|
||||
|
|
|
|||
169
yaboli/basic_types.py
Normal file
169
yaboli/basic_types.py
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
import time
|
||||
|
||||
class SessionView():
|
||||
"""
|
||||
This class keeps track of session details.
|
||||
http://api.euphoria.io/#sessionview
|
||||
"""
|
||||
|
||||
def __init__(self, id, name, server_id, server_era, session_id, is_staff=None, is_manager=None):
|
||||
"""
|
||||
id - agent/account id
|
||||
name - name of the client when the SessionView was captured
|
||||
server_id - id of the server
|
||||
server_era - era of the server
|
||||
session_id - session id (unique across euphoria)
|
||||
is_staff - client is staff
|
||||
is_manager - client is manager
|
||||
"""
|
||||
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.server_id = server_id
|
||||
self.server_era = server_era
|
||||
self.session_id = session_id
|
||||
self.staff = is_staff
|
||||
self.manager = is_manager
|
||||
|
||||
@classmethod
|
||||
def from_data(self, data):
|
||||
"""
|
||||
Creates and returns a session created from the data.
|
||||
|
||||
data - a euphoria SessionView
|
||||
"""
|
||||
|
||||
is_staff = data["is_staff"] if "is_staff" in data else None
|
||||
is_manager = data["is_manager"] if "is_manager" in data else None
|
||||
|
||||
return self(
|
||||
data["id"],
|
||||
data["name"],
|
||||
data["server_id"],
|
||||
data["server_era"],
|
||||
data["session_id"],
|
||||
is_staff,
|
||||
is_manager
|
||||
)
|
||||
|
||||
def session_type(self):
|
||||
"""
|
||||
session_type() -> str
|
||||
|
||||
The session's type (bot, account, agent).
|
||||
"""
|
||||
|
||||
return self.id.split(":")[0] if ":" in self.id else None
|
||||
|
||||
class Message():
|
||||
"""
|
||||
This class represents a single euphoria message.
|
||||
http://api.euphoria.io/#message
|
||||
"""
|
||||
|
||||
def __init__(self, id, time, sender, content, parent=None, edited=None, previous_edit_id=None,
|
||||
deleted=None, truncated=None, encryption_key_id=None):
|
||||
"""
|
||||
id - message id
|
||||
time - time the message was sent (epoch)
|
||||
sender - session of the sender
|
||||
content - content of the message
|
||||
parent - id of the parent message, or None
|
||||
edited - time of last edit (epoch)
|
||||
previous_edit_id - edit id of the most recent edit of this message
|
||||
deleted - time of deletion (epoch)
|
||||
truncated - message was truncated
|
||||
encryption_key_id - id of the key that encrypts the message in storage
|
||||
"""
|
||||
|
||||
self.id = id
|
||||
self.time = time
|
||||
self.sender = sender
|
||||
self.content = content
|
||||
self.parent = parent
|
||||
self.edited = edited
|
||||
self.previous_edit_id = previous_edit_id
|
||||
self.deleted = deleted
|
||||
self.truncated = truncated
|
||||
self.encryption_key_id = encryption_key_id
|
||||
|
||||
@classmethod
|
||||
def from_data(self, data):
|
||||
"""
|
||||
Creates and returns a message created from the data.
|
||||
NOTE: This also creates a session object using the data in "sender".
|
||||
|
||||
data - a euphoria message: http://api.euphoria.io/#message
|
||||
"""
|
||||
|
||||
sender = SessionView.from_data(data["sender"])
|
||||
parent = data["parent"] if "parent" in data else None
|
||||
edited = data["edited"] if "edited" in data else None
|
||||
deleted = data["deleted"] if "deleted" in data else None
|
||||
truncated = data["truncated"] if "truncated" in data else None
|
||||
previous_edit_id = data["previous_edit_id"] if "previous_edit_id" in data else None
|
||||
encryption_key_id = data["encryption_key_id"] if "encryption_key_id" in data else None
|
||||
|
||||
return self(
|
||||
data["id"],
|
||||
data["time"],
|
||||
sender,
|
||||
data["content"],
|
||||
parent=parent,
|
||||
edited=edited,
|
||||
deleted=deleted,
|
||||
truncated=truncated,
|
||||
previous_edit_id=previous_edit_id,
|
||||
encryption_key_id=encryption_key_id
|
||||
)
|
||||
|
||||
def time_formatted(self, date=True):
|
||||
"""
|
||||
time_formatted(date=True) -> str
|
||||
|
||||
date - include date in format
|
||||
|
||||
Time in a readable format:
|
||||
With date: YYYY-MM-DD HH:MM:SS
|
||||
Without date: HH:MM:SS
|
||||
"""
|
||||
|
||||
if date:
|
||||
return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(self.time))
|
||||
else:
|
||||
return time.strftime("%H:%M:%S", time.gmtime(self.time))
|
||||
|
||||
def formatted(self, show_time=False, date=True, insert_string=None, repeat_insert_string=True):
|
||||
"""
|
||||
formatted() -> strftime
|
||||
|
||||
The message contents in the following format (does not end on a newline):
|
||||
<time><insert_string>[<sender name>] message content
|
||||
<insert_string> more message on a new line
|
||||
|
||||
If repeat_insert_string is False, the insert_string will only appear
|
||||
on the first line.
|
||||
|
||||
If show_time is False, the time will not appear in the first line of
|
||||
the formatted message.
|
||||
The date option works like it does in Message.time_formatted().
|
||||
"""
|
||||
|
||||
msgtime = self.time_formatted(date) if show_time else ""
|
||||
if insert_string is None:
|
||||
insert_string = " " if show_time else ""
|
||||
lines = self.content.split("\n")
|
||||
|
||||
# first line
|
||||
msg = "{}{}[{}] {}\n".format(msgtime, insert_string, self.sender.name, lines[0])
|
||||
|
||||
# all other lines
|
||||
for line in lines[1:]:
|
||||
msg += "{}{} {} {}\n".format(
|
||||
" "*len(msgtime),
|
||||
insert_string if repeat_insert_string else " "*len(insert_string),
|
||||
" "*len(self.sender.name),
|
||||
line
|
||||
)
|
||||
|
||||
return msg[:-1] # remove trailing newline
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
import time
|
||||
|
||||
from . import session
|
||||
|
||||
class Message():
|
||||
"""
|
||||
This class keeps track of message details.
|
||||
"""
|
||||
|
||||
def __init__(self, id, time, sender, content, parent=None, edited=None, deleted=None,
|
||||
truncated=None):
|
||||
"""
|
||||
id - message id
|
||||
time - time the message was sent (epoch)
|
||||
sender - session of the sender
|
||||
content - content of the message
|
||||
parent - id of the parent message, or None
|
||||
edited - time of last edit (epoch)
|
||||
deleted - time of deletion (epoch)
|
||||
truncated - message was truncated
|
||||
"""
|
||||
|
||||
self.id = id
|
||||
self.time = time
|
||||
self.sender = sender
|
||||
self.content = content
|
||||
self.parent = parent
|
||||
self.edited = edited
|
||||
self.deleted = deleted
|
||||
self.truncated = truncated
|
||||
|
||||
@classmethod
|
||||
def from_data(self, data):
|
||||
"""
|
||||
Creates and returns a message created from the data.
|
||||
NOTE: This also creates a session object using the data in "sender".
|
||||
|
||||
data - a euphoria message: http://api.euphoria.io/#message
|
||||
"""
|
||||
|
||||
sender = session.Session.from_data(data["sender"])
|
||||
parent = data["parent"] if "parent" in data else None
|
||||
edited = data["edited"] if "edited" in data else None
|
||||
deleted = data["deleted"] if "deleted" in data else None
|
||||
truncated = data["truncated"] if "truncated" in data else None
|
||||
|
||||
return self(
|
||||
data["id"],
|
||||
data["time"],
|
||||
sender,
|
||||
data["content"],
|
||||
parent=parent,
|
||||
edited=edited,
|
||||
deleted=deleted,
|
||||
truncated=truncated
|
||||
)
|
||||
|
||||
def time_formatted(self, date=False):
|
||||
"""
|
||||
time_formatted(date=False) -> str
|
||||
|
||||
date - include date in format
|
||||
|
||||
Time in a readable format:
|
||||
With date: YYYY-MM-DD HH:MM:SS
|
||||
Without date: HH:MM:SS
|
||||
"""
|
||||
|
||||
if date:
|
||||
return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(self.time))
|
||||
else:
|
||||
return time.strftime("%H:%M:%S", time.gmtime(self.time))
|
||||
|
||||
def is_edited(self):
|
||||
"""
|
||||
is_edited() -> bool
|
||||
|
||||
Has this message been edited?
|
||||
"""
|
||||
|
||||
return True if self.edited is not None else False
|
||||
|
||||
def is_deleted(self):
|
||||
"""
|
||||
is_deleted() -> bool
|
||||
|
||||
Has this message been deleted?
|
||||
"""
|
||||
|
||||
return True if self.deleted is not None else False
|
||||
|
||||
def is_truncated(self):
|
||||
"""
|
||||
is_truncated() -> bool
|
||||
|
||||
Has this message been truncated?
|
||||
"""
|
||||
|
||||
return True if self.truncated is not None else False
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
class Session():
|
||||
"""
|
||||
This class keeps track of session details.
|
||||
"""
|
||||
|
||||
def __init__(self, id, name, server_id, server_era, session_id, is_staff=None, is_manager=None):
|
||||
"""
|
||||
id - agent/account id
|
||||
name - name of the client when the SessionView was captured
|
||||
server_id - id of the server
|
||||
server_era - era of the server
|
||||
session_id - session id (unique across euphoria)
|
||||
is_staff - client is staff
|
||||
is_manager - client is manager
|
||||
"""
|
||||
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.server_id = server_id
|
||||
self.server_era = server_era
|
||||
self.session_id = session_id
|
||||
self.staff = is_staff
|
||||
self.manager = is_manager
|
||||
|
||||
@classmethod
|
||||
def from_data(self, data):
|
||||
"""
|
||||
Creates and returns a session created from the data.
|
||||
|
||||
data - a euphoria SessionView: http://api.euphoria.io/#sessionview
|
||||
"""
|
||||
|
||||
is_staff = data["is_staff"] if "is_staff" in data else None
|
||||
is_manager = data["is_manager"] if "is_manager" in data else None
|
||||
|
||||
return self(
|
||||
data["id"],
|
||||
data["name"],
|
||||
data["server_id"],
|
||||
data["server_era"],
|
||||
data["session_id"],
|
||||
is_staff,
|
||||
is_manager
|
||||
)
|
||||
|
||||
def session_type(self):
|
||||
"""
|
||||
session_type() -> str
|
||||
|
||||
The session's type (bot, account, agent).
|
||||
"""
|
||||
|
||||
return self.id.split(":")[0]
|
||||
|
||||
def is_staff(self):
|
||||
"""
|
||||
is_staff() -> bool
|
||||
|
||||
Is a user staff?
|
||||
"""
|
||||
|
||||
return self.staff and True or False
|
||||
|
||||
def is_manager(self):
|
||||
"""
|
||||
is_manager() -> bool
|
||||
|
||||
Is a user manager?
|
||||
"""
|
||||
|
||||
return self.staff and True or False
|
||||
Loading…
Add table
Add a link
Reference in a new issue