Moved image upload code to shared function in bot.py. Removed the original urls for less spam.
This commit is contained in:
parent
e55af556ae
commit
e7b35d9c55
30
bot.py
30
bot.py
|
@ -19,8 +19,7 @@ import datetime
|
||||||
from importlib import reload
|
from importlib import reload
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from nio import AsyncClient, InviteEvent, JoinError, RoomMessageText, MatrixRoom, LoginError, RoomMemberEvent, RoomVisibility, RoomPreset, RoomCreateError, RoomResolveAliasResponse
|
from nio import AsyncClient, InviteEvent, JoinError, RoomMessageText, MatrixRoom, LoginError, RoomMemberEvent, RoomVisibility, RoomPreset, RoomCreateError, RoomResolveAliasResponse, UploadError, UploadResponse
|
||||||
|
|
||||||
|
|
||||||
# Couple of custom exceptions
|
# Couple of custom exceptions
|
||||||
|
|
||||||
|
@ -181,6 +180,33 @@ class Bot:
|
||||||
def should_ignore_event(self, event):
|
def should_ignore_event(self, event):
|
||||||
return "org.vranki.hemppa.ignore" in event.source['content']
|
return "org.vranki.hemppa.ignore" in event.source['content']
|
||||||
|
|
||||||
|
# Helper function to upload a image from URL to homeserver. Use send_image() to actually send it to room.
|
||||||
|
async def upload_image(self, url):
|
||||||
|
self.client: AsyncClient
|
||||||
|
response: UploadResponse
|
||||||
|
|
||||||
|
self.logger.debug(f"start downloading image from url {url}")
|
||||||
|
url_response = requests.get(url)
|
||||||
|
self.logger.debug(f"response [status_code={url_response.status_code}, headers={url_response.headers}")
|
||||||
|
|
||||||
|
if url_response.status_code == 200:
|
||||||
|
content_type = url_response.headers.get("content-type")
|
||||||
|
self.logger.info(f"uploading content to matrix server [size={len(url_response.content)}, content-type: {content_type}]")
|
||||||
|
(response, alist) = await self.client.upload(lambda a, b: url_response.content, content_type)
|
||||||
|
self.logger.debug("response: %s", response)
|
||||||
|
|
||||||
|
if isinstance(response, UploadResponse):
|
||||||
|
self.logger.info("uploaded file to %s", response.content_uri)
|
||||||
|
return response.content_uri
|
||||||
|
else:
|
||||||
|
response: UploadError
|
||||||
|
self.logger.error("unable to upload file. msg: %s", response.message)
|
||||||
|
else:
|
||||||
|
self.logger.error("unable to request url: %s", url_response)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def save_settings(self):
|
def save_settings(self):
|
||||||
module_settings = dict()
|
module_settings = dict()
|
||||||
for modulename, moduleobject in self.modules.items():
|
for modulename, moduleobject in self.modules.items():
|
||||||
|
|
|
@ -96,10 +96,10 @@ class MatrixModule(BotModule):
|
||||||
matrix_uri = self.matrix_uri_cache.get(apod.date)
|
matrix_uri = self.matrix_uri_cache.get(apod.date)
|
||||||
self.logger.debug(f"already uploaded picture {matrix_uri} for date {apod.date}")
|
self.logger.debug(f"already uploaded picture {matrix_uri} for date {apod.date}")
|
||||||
else:
|
else:
|
||||||
matrix_uri = await self.upload_image(bot, apod.hdurl)
|
matrix_uri = await bot.upload_image(apod.hdurl)
|
||||||
if matrix_uri is None:
|
if matrix_uri is None:
|
||||||
self.logger.warning("unable to upload hdurl. try url next.")
|
self.logger.warning("unable to upload hdurl. try url next.")
|
||||||
matrix_uri = await self.upload_image(bot, apod.url)
|
matrix_uri = await bot.upload_image(apod.url)
|
||||||
|
|
||||||
await bot.send_text(room, f"{apod.title} ({apod.date})")
|
await bot.send_text(room, f"{apod.title} ({apod.date})")
|
||||||
if matrix_uri is not None:
|
if matrix_uri is not None:
|
||||||
|
@ -107,37 +107,9 @@ class MatrixModule(BotModule):
|
||||||
bot.save_settings()
|
bot.save_settings()
|
||||||
await bot.send_image(room, matrix_uri, f"{apod.title}")
|
await bot.send_image(room, matrix_uri, f"{apod.title}")
|
||||||
else:
|
else:
|
||||||
await bot.send_text(room, "sorry. something went wrong uploading the image to matrix server :(")
|
await bot.send_text(room, "Sorry. Something went wrong uploading the image to Matrix server :(")
|
||||||
if apod.hdurl is not None:
|
|
||||||
await bot.send_text(room, f"original-hdurl: {apod.hdurl}")
|
|
||||||
await bot.send_text(room, f"original-url: {apod.url}")
|
|
||||||
await bot.send_text(room, f"{apod.explanation}")
|
await bot.send_text(room, f"{apod.explanation}")
|
||||||
|
|
||||||
async def upload_image(self, bot, url):
|
|
||||||
self.client: AsyncClient
|
|
||||||
response: UploadResponse
|
|
||||||
|
|
||||||
self.logger.debug(f"start downloading image from url {url}")
|
|
||||||
url_response = requests.get(url)
|
|
||||||
self.logger.debug(f"response [status_code={url_response.status_code}, headers={url_response.headers}")
|
|
||||||
|
|
||||||
if url_response.status_code == 200:
|
|
||||||
content_type = url_response.headers.get("content-type")
|
|
||||||
self.logger.info(f"uploading content to matrix server [size={len(url_response.content)}, content-type: {content_type}]")
|
|
||||||
(response, alist) = await bot.client.upload(lambda a, b: url_response.content, content_type)
|
|
||||||
self.logger.debug("response: %s", response)
|
|
||||||
|
|
||||||
if isinstance(response, UploadResponse):
|
|
||||||
self.logger.info("uploaded file to %s", response.content_uri)
|
|
||||||
return response.content_uri
|
|
||||||
else:
|
|
||||||
response: UploadError
|
|
||||||
self.logger.error("unable to upload file. msg: %s", response.message)
|
|
||||||
else:
|
|
||||||
self.logger.error("unable to request url: %s", url_response)
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_settings(self):
|
def get_settings(self):
|
||||||
data = super().get_settings()
|
data = super().get_settings()
|
||||||
data["matrix_uri_cache"] = self.matrix_uri_cache
|
data["matrix_uri_cache"] = self.matrix_uri_cache
|
||||||
|
|
Loading…
Reference in New Issue