test
This commit is contained in:
178
lib/tool_expand/discord.py
Normal file
178
lib/tool_expand/discord.py
Normal file
@@ -0,0 +1,178 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#########################################################
|
||||
|
||||
import os
|
||||
import traceback, time
|
||||
import random
|
||||
|
||||
import requests
|
||||
from discord_webhook import DiscordWebhook, DiscordEmbed
|
||||
|
||||
from framework import app
|
||||
from . import logger
|
||||
|
||||
|
||||
webhook_list = app.config['DEFINE']['WEBHOOK_LIST_FOR_IMAGE_PROXY']
|
||||
|
||||
class ToolExpandDiscord(object):
|
||||
|
||||
@classmethod
|
||||
def send_discord_message(cls, text, image_url=None, webhook_url=None):
|
||||
from system.model import ModelSetting as SystemModelSetting
|
||||
try:
|
||||
if webhook_url is None:
|
||||
webhook_url = SystemModelSetting.get('notify_discord_webhook')
|
||||
|
||||
webhook = DiscordWebhook(url=webhook_url, content=text)
|
||||
if image_url is not None:
|
||||
embed = DiscordEmbed()
|
||||
embed.set_timestamp()
|
||||
embed.set_image(url=image_url)
|
||||
webhook.add_embed(embed)
|
||||
response = webhook.execute()
|
||||
return True
|
||||
except Exception as exception:
|
||||
logger.error('Exception:%s', exception)
|
||||
logger.error(traceback.format_exc())
|
||||
return False
|
||||
|
||||
|
||||
@classmethod
|
||||
def discord_proxy_set_target(cls, source, target):
|
||||
try:
|
||||
return
|
||||
"""
|
||||
if source is None or target is None:
|
||||
return False
|
||||
if requests.get(target).status_code != 200:
|
||||
return False
|
||||
if target.startswith('https://images-ext-') and target.find('discordapp.net') != -1:
|
||||
from framework import py_urllib
|
||||
from system.model import ModelSetting as SystemModelSetting
|
||||
url = '{server_plugin_ddns}/server/normal/discord_proxy/set_target?source={source}&target={target}&user={user}'.format(server_plugin_ddns=server_plugin_ddns, source=py_urllib.quote_plus(source), target=py_urllib.quote_plus(target), user=SystemModelSetting.get('sjva_me_user_id'))
|
||||
data = requests.get(url).json()
|
||||
"""
|
||||
except Exception as exception:
|
||||
logger.error('server disconnect..')
|
||||
return True
|
||||
|
||||
|
||||
|
||||
|
||||
@classmethod
|
||||
def discord_proxy_image(cls, image_url, webhook_url=None, retry=True):
|
||||
#2020-12-23
|
||||
#image_url = None
|
||||
if image_url == '' or image_url is None:
|
||||
return
|
||||
data = None
|
||||
|
||||
if webhook_url is None or webhook_url == '':
|
||||
webhook_url = webhook_list[random.randint(10,len(webhook_list)-1)] # sjva 채널
|
||||
|
||||
try:
|
||||
from framework import py_urllib
|
||||
webhook = DiscordWebhook(url=webhook_url, content='')
|
||||
embed = DiscordEmbed()
|
||||
embed.set_timestamp()
|
||||
embed.set_image(url=image_url)
|
||||
webhook.add_embed(embed)
|
||||
import io
|
||||
byteio = io.BytesIO()
|
||||
webhook.add_file(file=byteio.getvalue(), filename='dummy')
|
||||
response = webhook.execute()
|
||||
data = None
|
||||
if type(response) == type([]):
|
||||
if len(response) > 0:
|
||||
data = response[0].json()
|
||||
else:
|
||||
data = response.json()
|
||||
|
||||
if data is not None and 'embeds' in data:
|
||||
target = data['embeds'][0]['image']['proxy_url']
|
||||
if requests.get(target).status_code == 200:
|
||||
return target
|
||||
else:
|
||||
return image_url
|
||||
else:
|
||||
raise Exception(str(data))
|
||||
except Exception as exception:
|
||||
logger.error('Exception:%s', exception)
|
||||
logger.error(traceback.format_exc())
|
||||
if retry:
|
||||
time.sleep(1)
|
||||
return cls.discord_proxy_image(image_url, webhook_url=None, retry=False)
|
||||
else:
|
||||
return image_url
|
||||
|
||||
|
||||
@classmethod
|
||||
def discord_proxy_image_localfile(cls, filepath, retry=True):
|
||||
data = None
|
||||
webhook_url = webhook_list[random.randint(0,9)] # sjva 채널
|
||||
|
||||
try:
|
||||
from discord_webhook import DiscordWebhook, DiscordEmbed
|
||||
webhook = DiscordWebhook(url=webhook_url, content='')
|
||||
import io
|
||||
with open(filepath, 'rb') as fh:
|
||||
byteio = io.BytesIO(fh.read())
|
||||
webhook.add_file(file=byteio.getvalue(), filename='image.jpg')
|
||||
embed = DiscordEmbed()
|
||||
embed.set_image(url="attachment://image.jpg")
|
||||
response = webhook.execute()
|
||||
data = None
|
||||
if type(response) == type([]):
|
||||
if len(response) > 0:
|
||||
data = response[0].json()
|
||||
else:
|
||||
data = response.json()
|
||||
|
||||
if data is not None and 'attachments' in data:
|
||||
target = data['attachments'][0]['url']
|
||||
if requests.get(target).status_code == 200:
|
||||
return target
|
||||
except Exception as exception:
|
||||
logger.error('Exception:%s', exception)
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
if retry:
|
||||
time.sleep(1)
|
||||
return cls.discord_proxy_image_localfile(filepath, retry=False)
|
||||
|
||||
|
||||
# RSS에서 자막 올린거
|
||||
@classmethod
|
||||
def discord_cdn(cls, byteio=None, filepath=None, filename=None, webhook_url=None, content='', retry=True):
|
||||
data = None
|
||||
if webhook_url is None:
|
||||
webhook_url = webhook_list[random.randint(0,9)] # sjva 채널
|
||||
|
||||
try:
|
||||
from discord_webhook import DiscordWebhook, DiscordEmbed
|
||||
webhook = DiscordWebhook(url=webhook_url, content=content)
|
||||
if byteio is None and filepath is not None:
|
||||
import io
|
||||
with open(filepath, 'rb') as fh:
|
||||
byteio = io.BytesIO(fh.read())
|
||||
|
||||
webhook.add_file(file=byteio.getvalue(), filename=filename)
|
||||
embed = DiscordEmbed()
|
||||
response = webhook.execute()
|
||||
data = None
|
||||
if type(response) == type([]):
|
||||
if len(response) > 0:
|
||||
data = response[0].json()
|
||||
else:
|
||||
data = response.json()
|
||||
|
||||
if data is not None and 'attachments' in data:
|
||||
target = data['attachments'][0]['url']
|
||||
if requests.get(target).status_code == 200:
|
||||
return target
|
||||
except Exception as exception:
|
||||
logger.error('Exception:%s', exception)
|
||||
logger.error(traceback.format_exc())
|
||||
if retry:
|
||||
time.sleep(1)
|
||||
return cls.discord_proxy_image_localfile(filepath, retry=False)
|
||||
Reference in New Issue
Block a user