Merge branch 'master' into voice

This commit is contained in:
Luna 2019-03-05 16:27:31 -03:00
commit 67ae2385b5
8 changed files with 24 additions and 11 deletions

1
.gitignore vendored
View File

@ -108,3 +108,4 @@ images/*
attachments/*
.DS_Store
.vscode

View File

@ -31,7 +31,7 @@ took a shot at writing it again. It works.
## Caveats
- Unit testing is incomplete.
- Currently, there are no plans to support voice chat, or the Discord Store.
- Currently, there are no plans to support video in voice chats, or the Discord Store.
- You must figure out how to connect to a Litecord instance. Litecord will not
distribute official client code from Discord nor provide ways to modify the
official client.

View File

@ -408,6 +408,9 @@ async def _create_message(channel_id):
await _dm_pre_dispatch(channel_id, user_id)
await _dm_pre_dispatch(channel_id, guild_id)
if payload['webhook_id'] == None:
payload.pop('webhook_id', None)
await app.dispatcher.dispatch('channel', channel_id,
'MESSAGE_CREATE', payload)

View File

@ -27,7 +27,6 @@ async def send_icon(scope, key, icon_hash, **kwargs):
"""Send an icon."""
icon = await app.icons.generic_get(
scope, key, icon_hash, **kwargs)
if not icon:
return '', 404

View File

@ -46,7 +46,7 @@ class EmbedURL:
EMBED_FOOTER = {
'text': {
'type': 'string', 'minlength': 1, 'maxlength': 128, 'required': True},
'type': 'string', 'minlength': 1, 'maxlength': 1024, 'required': True},
'icon_url': {
'coerce': EmbedURL, 'required': False,
@ -65,7 +65,7 @@ EMBED_THUMBNAIL = EMBED_IMAGE
EMBED_AUTHOR = {
'name': {
'type': 'string', 'minlength': 1, 'maxlength': 128, 'required': False
'type': 'string', 'minlength': 1, 'maxlength': 256, 'required': False
},
'url': {
'coerce': EmbedURL, 'required': False,
@ -79,10 +79,10 @@ EMBED_AUTHOR = {
EMBED_FIELD = {
'name': {
'type': 'string', 'minlength': 1, 'maxlength': 128, 'required': True
'type': 'string', 'minlength': 1, 'maxlength': 256, 'required': True
},
'value': {
'type': 'string', 'minlength': 1, 'maxlength': 128, 'required': True
'type': 'string', 'minlength': 1, 'maxlength': 1024, 'required': True
},
'inline': {
'type': 'boolean', 'required': False, 'default': True,
@ -91,10 +91,10 @@ EMBED_FIELD = {
EMBED_OBJECT = {
'title': {
'type': 'string', 'minlength': 1, 'maxlength': 128, 'required': False},
'type': 'string', 'minlength': 1, 'maxlength': 256, 'required': False},
# NOTE: type set by us
'description': {
'type': 'string', 'minlength': 1, 'maxlength': 1024, 'required': False,
'type': 'string', 'minlength': 1, 'maxlength': 2048, 'required': False,
},
'url': {
'coerce': EmbedURL, 'required': False,

View File

@ -287,8 +287,6 @@ class IconManager:
async def generic_get(self, scope, key, icon_hash,
**kwargs) -> Optional[Icon]:
"""Get any icon."""
if icon_hash is None:
return None
log.debug('GET {} {} {}', scope, key, icon_hash)
key = str(key)
@ -360,6 +358,9 @@ class IconManager:
elif 'size' in kwargs:
image = Image.open(data_fd)
if mime == 'image/jpeg':
image = image.convert("RGB")
want = kwargs['size']
log.info('resizing from {} to {}',

View File

@ -638,8 +638,10 @@ class Storage:
return [r[0] for r in rows]
async def _msg_regex(self, regex, func, content) -> List[Dict]:
res = []
if content is None:
return []
res = []
for match in regex.finditer(content):
found_id = match.group(1)
@ -798,6 +800,9 @@ class Storage:
res['type'] = res['message_type']
res.pop('message_type')
if res['content'] is None:
res['content'] = ""
channel_id = int(row['channel_id'])
content = row['content']
guild_id = await self.guild_from_channel(channel_id)

View File

@ -37,6 +37,10 @@ class Color:
"""Give the actual RGB integer encoding this color."""
return int('%02x%02x%02x' % (self.red, self.green, self.blue), 16)
@property
def to_json(self):
return self.value
def __int__(self):
return self.value