189 lines
5.9 KiB
Python
189 lines
5.9 KiB
Python
import requests, re
|
|
from mattermostdriver import Driver
|
|
from bs4 import BeautifulSoup
|
|
from io import BytesIO
|
|
|
|
mattermostDriver = Driver({
|
|
"url": "192.168.1.67",
|
|
"port": 8065,
|
|
"scheme": "http",
|
|
"token": "dmefeb8t7pditf3ot9377hrxch"
|
|
})
|
|
|
|
mattermostDriver.login()
|
|
|
|
|
|
def parse_links_from_mattermost(string):
|
|
linkmatches = re.compile(r'\((https?://[^\s)]+)\)')
|
|
fullmatches = re.compile(r'!\[.*?\]\(.*?\)')
|
|
|
|
links = linkmatches.findall(string)
|
|
full = fullmatches.findall(string)
|
|
|
|
for match in full:
|
|
string = string.replace(match, "")
|
|
|
|
for match in links:
|
|
string += match
|
|
|
|
return string
|
|
|
|
|
|
DISCORD_BOT_URL = 'http://localhost:5001/post_message'
|
|
|
|
def send_mattermost_to_discord(post, channel_to, avatar_url=None):
|
|
|
|
post_message = parse_links_from_mattermost(post['message'])
|
|
|
|
username = "Unknown"
|
|
if post['user']['nickname'] == "":
|
|
username = post['user']['username']
|
|
else:
|
|
username = post['user']['nickname']
|
|
|
|
if avatar_url:
|
|
payload = {
|
|
"message": post_message,
|
|
"channel_to": channel_to,
|
|
"username": username,
|
|
"avatar_url": avatar_url,
|
|
"discord_id": post['discord_id']
|
|
}
|
|
else:
|
|
payload = {
|
|
"message": post_message,
|
|
"channel_to": channel_to,
|
|
"username": username,
|
|
"avatar_url": None,
|
|
"discord_id": post['discord_id']
|
|
}
|
|
|
|
response = requests.post(DISCORD_BOT_URL, json=payload)
|
|
|
|
if response.status_code == 200:
|
|
print("Message sent successfully.")
|
|
else:
|
|
print("Failed to send the message.")
|
|
print(response.text)
|
|
|
|
def parse_links_from_discord(string):
|
|
linkmatches = re.compile(r'\bhttps?://(?:tenor|giphy)\.com/\S+\b')
|
|
links = linkmatches.findall(string)
|
|
|
|
for match in links:
|
|
response = requests.get(match)
|
|
soup = BeautifulSoup(response.text, 'html.parser')
|
|
gif_title = soup.find('meta', property='og:title')['content']
|
|
gif_url = soup.find('meta', property='og:image')['content']
|
|
|
|
string = string.replace(match, "")
|
|
string += f""
|
|
|
|
return string
|
|
|
|
def send_discord_to_mattermost(message, channel_to):
|
|
bearer_token = "g9rpuzcpkpgyddozad6j5nui9r"
|
|
url = "http://chat.treehousefullofstars.com/api/v4/posts"
|
|
webhook_url = "https://chat.treehousefullofstars.com/hooks/qjxs466x1pr63y71bszze56x4c"
|
|
|
|
channel_id = mattermostDriver.channels.get_channel_by_name_and_team_name('Treehousefullofstars', channel_to)['id']
|
|
|
|
new_contents = ""
|
|
count = 0
|
|
file_ids = []
|
|
"""if message.embeds:
|
|
print(message.embeds)
|
|
for embed in message.embeds:
|
|
new_contents += f"\n{embed.url}"
|
|
count += 1
|
|
|
|
file_url = embed.url
|
|
|
|
response = requests.get(file_url)
|
|
file_data = response.content
|
|
|
|
file_id = mattermostDriver.files.upload_file(
|
|
channel_id=channel_id,
|
|
files={'files': (embed.filename, file_data)}
|
|
)['file_infos'][0]['id']
|
|
file_ids.append(file_id)"""
|
|
|
|
if message.attachments:
|
|
print(message.attachments)
|
|
for attachment in message.attachments:
|
|
file_url = attachment.url
|
|
|
|
response = requests.get(file_url)
|
|
file_data = response.content
|
|
|
|
file_id = mattermostDriver.files.upload_file(
|
|
channel_id=channel_id,
|
|
files={'files': (attachment.filename, file_data)}
|
|
)['file_infos'][0]['id']
|
|
file_ids.append(file_id)
|
|
|
|
|
|
"""payload = {
|
|
"channel": channel_to,
|
|
"text": message.content,
|
|
"username": message.author.nick,
|
|
"icon_url": message.author.display_avatar.url,
|
|
"file_ids": file_ids
|
|
}
|
|
response = requests.post(webhook_url, json=payload)
|
|
print(response.content)"""
|
|
|
|
text = message.content
|
|
if count>0:
|
|
text += new_contents
|
|
|
|
text = parse_links_from_discord(text)
|
|
|
|
response = mattermostDriver.posts.create_post(options={
|
|
'channel_id': channel_id,
|
|
'props':{
|
|
'from_webhook': 'true',
|
|
'override_username': message.author.nick,
|
|
'override_icon_url': message.author.display_avatar.url
|
|
},
|
|
'message': text,
|
|
'file_ids': file_ids})
|
|
|
|
def send_misskey_to_mattermost(event, channel_id):
|
|
if event['body']['body']['renoteId']:
|
|
files = event['body']['body']['renote'].get('files', None)
|
|
else:
|
|
files = event['body']['body'].get('files', None)
|
|
|
|
file_ids=[]
|
|
if files != []:
|
|
for i, file in enumerate(files):
|
|
response = requests.get(file['url'])
|
|
file_data = BytesIO(response.content)
|
|
filename = file['name']
|
|
file_id = mattermostDriver.files.upload_file(
|
|
channel_id=channel_id,
|
|
files={'files': (filename, file_data)}
|
|
)['file_infos'][0]['id']
|
|
file_ids.append(file_id)
|
|
|
|
if event['body']['body']['renoteId']:
|
|
renote_user = event['body']['body']['renote']['user'].get('name', 'unknown')
|
|
renote_username = event['body']['body']['renote']['user'].get('username', 'unknown')
|
|
renote_user_host = event['body']['body']['renote']['user'].get('hose', 'unknown')
|
|
note_content = f"*Renoted {renote_user} (@{renote_username}@{renote_user_host})*\n{event['body']['body']['renote']['text']}"
|
|
else:
|
|
note_content = event['body']['body'].get('text', 'No text in note')
|
|
|
|
username = event['body']['body']['user'].get('name', 'Misskey Bot')
|
|
avatar_url = event['body']['body']['user'].get('avatarUrl', '')
|
|
|
|
response = mattermostDriver.posts.create_post(options={
|
|
'channel_id': channel_id,
|
|
'props':{
|
|
'from_webhook': 'true',
|
|
'override_username':username,
|
|
'override_icon_url': avatar_url
|
|
},
|
|
'message': note_content,
|
|
'file_ids': file_ids}) |