add media upload for authenticated users
This commit is contained in:
parent
eef37d1360
commit
7dad1fef3b
1 changed files with 42 additions and 11 deletions
|
@ -186,7 +186,7 @@ async def new_message(event, user):
|
|||
|
||||
raw = {}
|
||||
raw['io.pnut.core.crosspost'] = [crosspost_raw(event)]
|
||||
text, oembed = msg_from_event(event)
|
||||
text, oembed = await msg_from_event(event, user)
|
||||
text = prefix + text
|
||||
if oembed:
|
||||
raw['io.pnut.core.oembed'] = [oembed]
|
||||
|
@ -291,7 +291,7 @@ async def new_message(event, user):
|
|||
logging.exception('-something bad happened here-')
|
||||
return
|
||||
|
||||
def msg_from_event(event):
|
||||
async def msg_from_event(event, user):
|
||||
text = None
|
||||
oembed = None
|
||||
if (event['content']['msgtype'] == 'm.text' or
|
||||
|
@ -301,6 +301,10 @@ def msg_from_event(event):
|
|||
elif event['content']['msgtype'] == 'm.emote':
|
||||
text = "* " + event['content']['body']
|
||||
|
||||
elif (event['content']['msgtype'] == 'm.image' and
|
||||
user is not None):
|
||||
oembed = await media_from_event(event, user)
|
||||
text = event['content']['body']
|
||||
elif (event['content']['msgtype'] == 'm.image' or
|
||||
event['content']['msgtype'] == 'm.video' or
|
||||
event['content']['msgtype'] == 'm.audio'):
|
||||
|
@ -342,13 +346,38 @@ def crosspost_raw(event):
|
|||
return crosspost
|
||||
|
||||
# TODO: This could be used for uploading the media to pnut, maybe
|
||||
# async def media_from_event(event):
|
||||
# matrix_api = ClientAPI(app.config['MATRIX_AS_ID'],
|
||||
# base_url=app.config['MATRIX_HOST'],
|
||||
# token=app.config['MATRIX_AS_TOKEN'])
|
||||
#
|
||||
# mxc_url = event['content']['url']
|
||||
# media_file = await matrix_api.download_media(mxc_url)
|
||||
async def media_from_event(event, user):
|
||||
mxc_url = event['content']['url']
|
||||
if event['content']['msgtype'] == 'm.image':
|
||||
kind = 'image'
|
||||
else:
|
||||
kind = 'other'
|
||||
mime_type = event['content']['info']['mimetype']
|
||||
file_name = event['content']['body']
|
||||
file_data = {'type': f'dev.mcmillian.pnut-matrix.{kind}',
|
||||
'name': file_name, 'kind': kind,
|
||||
'mimetype': mime_type, 'is_public': True}
|
||||
|
||||
matrix_api = ClientAPI(app.config['MATRIX_AS_ID'],
|
||||
base_url=app.config['MATRIX_HOST'],
|
||||
token=app.config['MATRIX_AS_TOKEN'])
|
||||
media_file = await matrix_api.download_media(mxc_url)
|
||||
pnutpy.api.add_authorization_token(user.pnut_user_token)
|
||||
|
||||
try:
|
||||
pnut_file, meta = pnutpy.api.create_file(files={'content': media_file},
|
||||
data=file_data)
|
||||
|
||||
except pnutpy.errors.PnutPermissionDenied:
|
||||
return {}
|
||||
|
||||
oembed = {
|
||||
'+io.pnut.core.file': {
|
||||
'file_id': pnut_file.id,
|
||||
'file_token': pnut_file.file_token,
|
||||
'format': 'oembed'}}
|
||||
|
||||
return oembed
|
||||
|
||||
def oembed_from_event(event):
|
||||
media_url = event['content']['url'][6:]
|
||||
|
@ -457,7 +486,9 @@ async def create_pnut_matrix_room(channel, user):
|
|||
if 'io.pnut.core.chat-settings' in channel.raw:
|
||||
for setting in channel.raw['io.pnut.core.chat-settings']:
|
||||
if 'name' in setting:
|
||||
name = setting['name']
|
||||
name = f"🥜 {setting['name']}"
|
||||
else:
|
||||
name = f"🥜 channel {channel.id}"
|
||||
if 'description' in setting:
|
||||
topic = setting['description']['text']
|
||||
|
||||
|
@ -764,7 +795,7 @@ def cmd_user_auth():
|
|||
reply += "https://pnut.io/oauth/authenticate"
|
||||
reply += "?client_id=6SeCRCpCZkmZOKFLFGWbcdAeq2fX1M5t"
|
||||
reply += "&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
|
||||
reply += "&scope=write_post,presence,messages&response_type=token\n\n"
|
||||
reply += "&scope=files,write_post,presence,messages&response_type=token\n\n"
|
||||
reply += "You will be provided with a token that you store with the !save command.\n"
|
||||
|
||||
return TextMessageEventContent(msgtype='m.text', body=reply)
|
||||
|
|
Loading…
Reference in a new issue