Update copyright year and fix minor lint problems
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -15,18 +15,7 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
"""This module contains classes handling commands issued by Matrix users."""
|
"""This module contains classes handling commands issued by Matrix users."""
|
||||||
from typing import (
|
from typing import Awaitable, Callable, Dict, List, NamedTuple, Optional
|
||||||
Any,
|
|
||||||
Awaitable,
|
|
||||||
Callable,
|
|
||||||
Coroutine,
|
|
||||||
Dict,
|
|
||||||
List,
|
|
||||||
NamedTuple,
|
|
||||||
Optional,
|
|
||||||
Union,
|
|
||||||
NewType,
|
|
||||||
)
|
|
||||||
import logging
|
import logging
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
@@ -93,6 +82,7 @@ class CommandEvent:
|
|||||||
is_portal: Determines whether the room in which the command was issued
|
is_portal: Determines whether the room in which the command was issued
|
||||||
is a portal.
|
is a portal.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, processor: 'CommandProcessor', room: MatrixRoomID, event: MatrixEventID,
|
def __init__(self, processor: 'CommandProcessor', room: MatrixRoomID, event: MatrixEventID,
|
||||||
sender: u.User, command: str, args: List[str], is_management: bool,
|
sender: u.User, command: str, args: List[str], is_management: bool,
|
||||||
is_portal: bool) -> None:
|
is_portal: bool) -> None:
|
||||||
@@ -111,12 +101,8 @@ class CommandEvent:
|
|||||||
self.is_management = is_management
|
self.is_management = is_management
|
||||||
self.is_portal = is_portal
|
self.is_portal = is_portal
|
||||||
|
|
||||||
def reply(
|
def reply(self, message: str, allow_html: bool = False, render_markdown: bool = True
|
||||||
self,
|
) -> Awaitable[Dict]:
|
||||||
message: str,
|
|
||||||
allow_html: bool = False,
|
|
||||||
render_markdown: bool = True,
|
|
||||||
) -> Awaitable[Dict]:
|
|
||||||
"""Write a reply to the room in which the command was issued.
|
"""Write a reply to the room in which the command was issued.
|
||||||
|
|
||||||
Replaces occurences of "$cmdprefix" in the message with the command
|
Replaces occurences of "$cmdprefix" in the message with the command
|
||||||
@@ -136,9 +122,8 @@ class CommandEvent:
|
|||||||
Handler for the message sending function.
|
Handler for the message sending function.
|
||||||
"""
|
"""
|
||||||
message_cmd = self._replace_command_prefix(message)
|
message_cmd = self._replace_command_prefix(message)
|
||||||
html = self._render_message(
|
html = self._render_message(message_cmd, allow_html=allow_html,
|
||||||
message_cmd, allow_html=allow_html, render_markdown=render_markdown
|
render_markdown=render_markdown)
|
||||||
)
|
|
||||||
|
|
||||||
return self.az.intent.send_notice(self.room_id, message_cmd, html=html)
|
return self.az.intent.send_notice(self.room_id, message_cmd, html=html)
|
||||||
|
|
||||||
@@ -153,9 +138,8 @@ class CommandEvent:
|
|||||||
)
|
)
|
||||||
return message.replace("$cmdprefix", self.command_prefix)
|
return message.replace("$cmdprefix", self.command_prefix)
|
||||||
|
|
||||||
def _render_message(
|
@staticmethod
|
||||||
self, message: str, allow_html: bool, render_markdown: bool
|
def _render_message(message: str, allow_html: bool, render_markdown: bool) -> Optional[str]:
|
||||||
) -> Optional[str]:
|
|
||||||
"""Renders the message as HTML.
|
"""Renders the message as HTML.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -194,6 +178,7 @@ class CommandHandler:
|
|||||||
name: The name of this command.
|
name: The name of this command.
|
||||||
help_section: Section of the help in which this command will appear.
|
help_section: Section of the help in which this command will appear.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, handler: Callable[[CommandEvent], Awaitable[Dict]], needs_auth: bool,
|
def __init__(self, handler: Callable[[CommandEvent], Awaitable[Dict]], needs_auth: bool,
|
||||||
needs_puppeting: bool, needs_matrix_puppeting: bool, needs_admin: bool,
|
needs_puppeting: bool, needs_matrix_puppeting: bool, needs_admin: bool,
|
||||||
management_only: bool, name: str, help_text: str, help_args: str,
|
management_only: bool, name: str, help_text: str, help_args: str,
|
||||||
@@ -254,7 +239,7 @@ class CommandHandler:
|
|||||||
Args:
|
Args:
|
||||||
is_management: If the room in which the command will be issued is a
|
is_management: If the room in which the command will be issued is a
|
||||||
management room.
|
management room.
|
||||||
puppet_whitelited: If the connected Telegram account puppet is
|
puppet_whitelisted: If the connected Telegram account puppet is
|
||||||
allowed to issue the command.
|
allowed to issue the command.
|
||||||
matrix_puppet_whitelisted: If the connected Matrix account puppet is
|
matrix_puppet_whitelisted: If the connected Matrix account puppet is
|
||||||
allowed to issue the command.
|
allowed to issue the command.
|
||||||
@@ -308,10 +293,9 @@ def command_handler(_func: Optional[Callable[[CommandEvent], Awaitable[Dict]]] =
|
|||||||
name: Optional[str] = None,
|
name: Optional[str] = None,
|
||||||
help_text: str = "",
|
help_text: str = "",
|
||||||
help_args: str = "",
|
help_args: str = "",
|
||||||
help_section: HelpSection = None
|
help_section: HelpSection = None,
|
||||||
) -> Callable[[Callable[[CommandEvent], Awaitable[Optional[Dict]]]],
|
) -> Callable[[Callable[[CommandEvent], Awaitable[Optional[Dict]]]],
|
||||||
CommandHandler]:
|
CommandHandler]:
|
||||||
|
|
||||||
def decorator(func: Callable[[CommandEvent], Awaitable[Optional[Dict]]]) -> CommandHandler:
|
def decorator(func: Callable[[CommandEvent], Awaitable[Optional[Dict]]]) -> CommandHandler:
|
||||||
actual_name = name or func.__name__.replace("_", "-")
|
actual_name = name or func.__name__.replace("_", "-")
|
||||||
handler = CommandHandler(func, needs_auth, needs_puppeting, needs_matrix_puppeting,
|
handler = CommandHandler(func, needs_auth, needs_puppeting, needs_matrix_puppeting,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -65,8 +65,8 @@ def _get_management_status(evt: CommandEvent) -> str:
|
|||||||
return "**This is not a management room**: you must prefix commands with `$cmdprefix`."
|
return "**This is not a management room**: you must prefix commands with `$cmdprefix`."
|
||||||
|
|
||||||
|
|
||||||
@command_handler(needs_auth=False, needs_puppeting=False,
|
@command_handler(name="help", needs_auth=False, needs_puppeting=False,
|
||||||
help_section=SECTION_GENERAL,
|
help_section=SECTION_GENERAL,
|
||||||
help_text="Show this help message.")
|
help_text="Show this help message.")
|
||||||
async def help(evt: CommandEvent) -> Optional[Dict]:
|
async def help_cmd(evt: CommandEvent) -> Optional[Dict]:
|
||||||
return await evt.reply(_get_management_status(evt) + "\n" + await _get_help_text(evt))
|
return await evt.reply(_get_management_status(evt) + "\n" + await _get_help_text(evt))
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -18,9 +18,10 @@ from typing import Dict, Awaitable
|
|||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
from ...config import yaml
|
from ...config import yaml
|
||||||
from ... import portal as po, user as u, util
|
from ... import portal as po, util
|
||||||
from .. import command_handler, CommandEvent, SECTION_PORTAL_MANAGEMENT
|
from .. import command_handler, CommandEvent, SECTION_PORTAL_MANAGEMENT
|
||||||
|
|
||||||
|
|
||||||
@command_handler(help_section=SECTION_PORTAL_MANAGEMENT,
|
@command_handler(help_section=SECTION_PORTAL_MANAGEMENT,
|
||||||
help_text="View or change per-portal settings.",
|
help_text="View or change per-portal settings.",
|
||||||
help_args="<`help`|_subcommand_> [...]")
|
help_args="<`help`|_subcommand_> [...]")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from ... import portal as po
|
from ... import portal as po
|
||||||
|
from ...types import TelegramID
|
||||||
from .. import command_handler, CommandEvent, SECTION_CREATING_PORTALS
|
from .. import command_handler, CommandEvent, SECTION_CREATING_PORTALS
|
||||||
from .util import user_has_power_level, get_initial_state
|
from .util import user_has_power_level, get_initial_state
|
||||||
|
|
||||||
@@ -50,7 +51,8 @@ async def create(evt: CommandEvent) -> Dict:
|
|||||||
"group": "chat",
|
"group": "chat",
|
||||||
}[type]
|
}[type]
|
||||||
|
|
||||||
portal = po.Portal(tgid=None, mxid=evt.room_id, title=title, about=about, peer_type=type)
|
portal = po.Portal(tgid=TelegramID(0), peer_type=type,
|
||||||
|
mxid=evt.room_id, title=title, about=about)
|
||||||
try:
|
try:
|
||||||
await portal.create_telegram_chat(evt.sender, supergroup=supergroup)
|
await portal.create_telegram_chat(evt.sender, supergroup=supergroup)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -46,11 +46,11 @@ async def filter_mode(evt: CommandEvent) -> Dict:
|
|||||||
"`!filter blacklist <chat ID>`.")
|
"`!filter blacklist <chat ID>`.")
|
||||||
|
|
||||||
|
|
||||||
@command_handler(needs_admin=True,
|
@command_handler(name="filter", needs_admin=True,
|
||||||
help_section=SECTION_ADMIN,
|
help_section=SECTION_ADMIN,
|
||||||
help_args="<`whitelist`|`blacklist`> <_chat ID_>",
|
help_args="<`whitelist`|`blacklist`> <_chat ID_>",
|
||||||
help_text="Allow or disallow bridging a specific chat.")
|
help_text="Allow or disallow bridging a specific chat.")
|
||||||
async def filter(evt: CommandEvent) -> Optional[Dict]:
|
async def edit_filter(evt: CommandEvent) -> Optional[Dict]:
|
||||||
try:
|
try:
|
||||||
action = evt.args[0]
|
action = evt.args[0]
|
||||||
if action not in ("whitelist", "blacklist", "add", "remove"):
|
if action not in ("whitelist", "blacklist", "add", "remove"):
|
||||||
@@ -58,11 +58,11 @@ async def filter(evt: CommandEvent) -> Optional[Dict]:
|
|||||||
|
|
||||||
id_str = evt.args[1]
|
id_str = evt.args[1]
|
||||||
if id_str.startswith("-100"):
|
if id_str.startswith("-100"):
|
||||||
id = int(id_str[4:])
|
filter_id = int(id_str[4:])
|
||||||
elif id_str.startswith("-"):
|
elif id_str.startswith("-"):
|
||||||
id = int(id_str[1:])
|
filter_id = int(id_str[1:])
|
||||||
else:
|
else:
|
||||||
id = int(id_str)
|
filter_id = int(id_str)
|
||||||
except (IndexError, ValueError):
|
except (IndexError, ValueError):
|
||||||
return await evt.reply("**Usage:** `$cmdprefix+sp filter <whitelist/blacklist> <chat ID>`")
|
return await evt.reply("**Usage:** `$cmdprefix+sp filter <whitelist/blacklist> <chat ID>`")
|
||||||
|
|
||||||
@@ -70,26 +70,26 @@ async def filter(evt: CommandEvent) -> Optional[Dict]:
|
|||||||
if mode not in ("blacklist", "whitelist"):
|
if mode not in ("blacklist", "whitelist"):
|
||||||
return await evt.reply(f"Unknown filter mode \"{mode}\". Please fix the bridge config.")
|
return await evt.reply(f"Unknown filter mode \"{mode}\". Please fix the bridge config.")
|
||||||
|
|
||||||
list = evt.config["bridge.filter.list"]
|
filter_id_list = evt.config["bridge.filter.list"]
|
||||||
|
|
||||||
if action in ("blacklist", "whitelist"):
|
if action in ("blacklist", "whitelist"):
|
||||||
action = "add" if mode == action else "remove"
|
action = "add" if mode == action else "remove"
|
||||||
|
|
||||||
def save() -> None:
|
def save() -> None:
|
||||||
evt.config["bridge.filter.list"] = list
|
evt.config["bridge.filter.list"] = filter_id_list
|
||||||
evt.config.save()
|
evt.config.save()
|
||||||
po.Portal.filter_list = list
|
po.Portal.filter_list = filter_id_list
|
||||||
|
|
||||||
if action == "add":
|
if action == "add":
|
||||||
if id in list:
|
if filter_id in filter_id_list:
|
||||||
return await evt.reply(f"That chat is already {mode}ed.")
|
return await evt.reply(f"That chat is already {mode}ed.")
|
||||||
list.append(id)
|
filter_id_list.append(filter_id)
|
||||||
save()
|
save()
|
||||||
return await evt.reply(f"Chat ID added to {mode}.")
|
return await evt.reply(f"Chat ID added to {mode}.")
|
||||||
elif action == "remove":
|
elif action == "remove":
|
||||||
if id not in list:
|
if filter_id not in filter_id_list:
|
||||||
return await evt.reply(f"That chat is not {mode}ed.")
|
return await evt.reply(f"That chat is not {mode}ed.")
|
||||||
list.remove(id)
|
filter_id_list.remove(filter_id)
|
||||||
save()
|
save()
|
||||||
return await evt.reply(f"Chat ID removed from {mode}.")
|
return await evt.reply(f"Chat ID removed from {mode}.")
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -38,10 +38,10 @@ async def sync_state(evt: CommandEvent) -> Dict:
|
|||||||
await evt.reply("Synchronization complete")
|
await evt.reply("Synchronization complete")
|
||||||
|
|
||||||
|
|
||||||
@command_handler(needs_admin=False, needs_puppeting=False, needs_auth=False,
|
@command_handler(name="id", needs_admin=False, needs_puppeting=False, needs_auth=False,
|
||||||
help_section=SECTION_MISC,
|
help_section=SECTION_MISC,
|
||||||
help_text="Get the ID of the Telegram chat where this room is bridged.")
|
help_text="Get the ID of the Telegram chat where this room is bridged.")
|
||||||
async def id(evt: CommandEvent) -> Dict:
|
async def get_id(evt: CommandEvent) -> Dict:
|
||||||
portal = po.Portal.get_by_mxid(evt.room_id)
|
portal = po.Portal.get_by_mxid(evt.room_id)
|
||||||
if not portal:
|
if not portal:
|
||||||
return await evt.reply("This is not a portal room.")
|
return await evt.reply("This is not a portal room.")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -20,10 +20,11 @@ from sqlalchemy import Table
|
|||||||
from sqlalchemy.engine.base import Engine
|
from sqlalchemy.engine.base import Engine
|
||||||
from sqlalchemy.engine.result import RowProxy
|
from sqlalchemy.engine.result import RowProxy
|
||||||
from sqlalchemy.sql.base import ImmutableColumnCollection
|
from sqlalchemy.sql.base import ImmutableColumnCollection
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import as_declarative
|
||||||
|
|
||||||
|
|
||||||
class BaseBase:
|
@as_declarative()
|
||||||
|
class Base:
|
||||||
db = None # type: Engine
|
db = None # type: Engine
|
||||||
t = None # type: Table
|
t = None # type: Table
|
||||||
__table__ = None # type: Table
|
__table__ = None # type: Table
|
||||||
@@ -54,6 +55,3 @@ class BaseBase:
|
|||||||
def delete(self) -> None:
|
def delete(self) -> None:
|
||||||
with self.db.begin() as conn:
|
with self.db.begin() as conn:
|
||||||
conn.execute(self.t.delete().where(self._edit_identity))
|
conn.execute(self.t.delete().where(self._edit_identity))
|
||||||
|
|
||||||
|
|
||||||
Base = declarative_base(cls=BaseBase)
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -29,16 +29,16 @@ class BotChat(Base):
|
|||||||
type = Column(String, nullable=False)
|
type = Column(String, nullable=False)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def delete(cls, id: TelegramID) -> None:
|
def delete(cls, chat_id: TelegramID) -> None:
|
||||||
with cls.db.begin() as conn:
|
with cls.db.begin() as conn:
|
||||||
conn.execute(cls.t.delete().where(cls.c.id == id))
|
conn.execute(cls.t.delete().where(cls.c.id == chat_id))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def all(cls) -> Iterable['BotChat']:
|
def all(cls) -> Iterable['BotChat']:
|
||||||
rows = cls.db.execute(cls.t.select())
|
rows = cls.db.execute(cls.t.select())
|
||||||
for row in rows:
|
for row in rows:
|
||||||
id, type = row
|
chat_id, chat_type = row
|
||||||
yield cls(id=id, type=type)
|
yield cls(id=chat_id, type=chat_type)
|
||||||
|
|
||||||
def insert(self) -> None:
|
def insert(self) -> None:
|
||||||
with self.db.begin() as conn:
|
with self.db.begin() as conn:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -35,14 +35,14 @@ class TelegramFile(Base):
|
|||||||
thumbnail = None # type: Optional[TelegramFile]
|
thumbnail = None # type: Optional[TelegramFile]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, id: str) -> Optional['TelegramFile']:
|
def get(cls, loc_id: str) -> Optional['TelegramFile']:
|
||||||
rows = cls.db.execute(cls.t.select().where(cls.c.id == id))
|
rows = cls.db.execute(cls.t.select().where(cls.c.id == loc_id))
|
||||||
try:
|
try:
|
||||||
id, mxc, mime, conv, ts, s, w, h, thumb_id = next(rows)
|
loc_id, mxc, mime, conv, ts, s, w, h, thumb_id = next(rows)
|
||||||
thumb = None
|
thumb = None
|
||||||
if thumb_id:
|
if thumb_id:
|
||||||
thumb = cls.get(thumb_id)
|
thumb = cls.get(thumb_id)
|
||||||
return cls(id=id, mxc=mxc, mime_type=mime, was_converted=conv, timestamp=ts,
|
return cls(id=loc_id, mxc=mxc, mime_type=mime, was_converted=conv, timestamp=ts,
|
||||||
size=s, width=w, height=h, thumbnail_id=thumb_id, thumbnail=thumb)
|
size=s, width=w, height=h, thumbnail_id=thumb_id, thumbnail=thumb)
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -36,7 +36,7 @@ should_bridge_plaintext_highlights = False # type: bool
|
|||||||
|
|
||||||
command_regex = re.compile(r"^!([A-Za-z0-9@]+)") # type: Pattern
|
command_regex = re.compile(r"^!([A-Za-z0-9@]+)") # type: Pattern
|
||||||
not_command_regex = re.compile(r"^\\(![A-Za-z0-9@]+)") # type: Pattern
|
not_command_regex = re.compile(r"^\\(![A-Za-z0-9@]+)") # type: Pattern
|
||||||
plain_mention_regex = None # type: Pattern
|
plain_mention_regex = None # type: Optional[Pattern]
|
||||||
|
|
||||||
|
|
||||||
def plain_mention_to_html(match: Match) -> str:
|
def plain_mention_to_html(match: Match) -> str:
|
||||||
@@ -147,5 +147,5 @@ def init_mx(context: "Context") -> None:
|
|||||||
config = context.config
|
config = context.config
|
||||||
dn_template = config.get("bridge.displayname_template", "{displayname} (Telegram)")
|
dn_template = config.get("bridge.displayname_template", "{displayname} (Telegram)")
|
||||||
dn_template = re.escape(dn_template).replace(re.escape("{displayname}"), "[^>]+")
|
dn_template = re.escape(dn_template).replace(re.escape("{displayname}"), "[^>]+")
|
||||||
plain_mention_regex = re.compile(f"(\s|^)({dn_template})")
|
plain_mention_regex = re.compile(f"^({dn_template})")
|
||||||
should_bridge_plaintext_highlights = config["bridge.plaintext_highlights"] or False
|
should_bridge_plaintext_highlights = config["bridge.plaintext_highlights"] or False
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -71,7 +71,7 @@ async def _add_forward_header(source, text: str, html: Optional[str],
|
|||||||
html = escape(text)
|
html = escape(text)
|
||||||
fwd_from_html, fwd_from_text = None, None
|
fwd_from_html, fwd_from_text = None, None
|
||||||
if fwd_from.from_id:
|
if fwd_from.from_id:
|
||||||
user = u.User.get_by_tgid(fwd_from.from_id)
|
user = u.User.get_by_tgid(TelegramID(fwd_from.from_id))
|
||||||
if user:
|
if user:
|
||||||
fwd_from_text = user.displayname or user.mxid
|
fwd_from_text = user.displayname or user.mxid
|
||||||
fwd_from_html = f"<a href='https://matrix.to/#/{user.mxid}'>{fwd_from_text}</a>"
|
fwd_from_html = f"<a href='https://matrix.to/#/{user.mxid}'>{fwd_from_text}</a>"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -1258,8 +1258,8 @@ class Portal:
|
|||||||
|
|
||||||
invites = await self._get_telegram_users_in_matrix_room()
|
invites = await self._get_telegram_users_in_matrix_room()
|
||||||
if len(invites) < 2:
|
if len(invites) < 2:
|
||||||
raise ValueError("Not enough Telegram users to create a chat")
|
raise ValueError("Not enough Telegram users to create a chat. "
|
||||||
|
"Invite more Telegram ghost users to the room, such as the relaybot.")
|
||||||
if self.peer_type == "chat":
|
if self.peer_type == "chat":
|
||||||
response = await source.client(CreateChatRequest(title=self.title, users=invites))
|
response = await source.client(CreateChatRequest(title=self.title, users=invites))
|
||||||
entity = response.chats[0]
|
entity = response.chats[0]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -65,7 +65,7 @@ class User(AbstractUser):
|
|||||||
self.db_portals = db_portals or []
|
self.db_portals = db_portals or []
|
||||||
self._db_instance = db_instance # type: Optional[DBUser]
|
self._db_instance = db_instance # type: Optional[DBUser]
|
||||||
|
|
||||||
self.command_status = None # type: Dict
|
self.command_status = None # type: Optional[Dict]
|
||||||
|
|
||||||
(self.relaybot_whitelisted,
|
(self.relaybot_whitelisted,
|
||||||
self.whitelisted,
|
self.whitelisted,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -147,9 +147,11 @@ async def transfer_thumbnail_to_matrix(client: MautrixTelegramClient, intent: In
|
|||||||
|
|
||||||
transfer_locks = {} # type: Dict[str, asyncio.Lock]
|
transfer_locks = {} # type: Dict[str, asyncio.Lock]
|
||||||
|
|
||||||
|
TypeThumbnail = Optional[Union[TypeLocation, TypePhotoSize]]
|
||||||
|
|
||||||
|
|
||||||
async def transfer_file_to_matrix(client: MautrixTelegramClient, intent: IntentAPI,
|
async def transfer_file_to_matrix(client: MautrixTelegramClient, intent: IntentAPI,
|
||||||
location: TypeLocation, thumbnail: Optional[Union[TypeLocation, TypePhotoSize]] = None,
|
location: TypeLocation, thumbnail: TypeThumbnail = None,
|
||||||
is_sticker: bool = False) -> Optional[DBTelegramFile]:
|
is_sticker: bool = False) -> Optional[DBTelegramFile]:
|
||||||
location_id = _location_to_id(location)
|
location_id = _location_to_id(location)
|
||||||
if not location_id:
|
if not location_id:
|
||||||
@@ -171,8 +173,8 @@ async def transfer_file_to_matrix(client: MautrixTelegramClient, intent: IntentA
|
|||||||
|
|
||||||
async def _unlocked_transfer_file_to_matrix(client: MautrixTelegramClient, intent: IntentAPI,
|
async def _unlocked_transfer_file_to_matrix(client: MautrixTelegramClient, intent: IntentAPI,
|
||||||
loc_id: str, location: TypeLocation,
|
loc_id: str, location: TypeLocation,
|
||||||
thumbnail: Optional[Union[TypeLocation, TypePhotoSize]],
|
thumbnail: TypeThumbnail, is_sticker: bool
|
||||||
is_sticker: bool) -> Optional[DBTelegramFile]:
|
) -> Optional[DBTelegramFile]:
|
||||||
db_file = DBTelegramFile.get(loc_id)
|
db_file = DBTelegramFile.get(loc_id)
|
||||||
if db_file:
|
if db_file:
|
||||||
return db_file
|
return db_file
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -87,7 +87,8 @@ class AuthAPI(abc.ABC):
|
|||||||
except PhoneNumberAppSignupForbiddenError:
|
except PhoneNumberAppSignupForbiddenError:
|
||||||
return self.get_login_response(mxid=user.mxid, state="request", status=403,
|
return self.get_login_response(mxid=user.mxid, state="request", status=403,
|
||||||
errcode="phone_number_app_signup_forbidden",
|
errcode="phone_number_app_signup_forbidden",
|
||||||
error="You have disabled 3rd party apps on your account.")
|
error="You have disabled 3rd party apps on your "
|
||||||
|
"account.")
|
||||||
except PhoneNumberUnoccupiedError:
|
except PhoneNumberUnoccupiedError:
|
||||||
return self.get_login_response(mxid=user.mxid, state="request", status=404,
|
return self.get_login_response(mxid=user.mxid, state="request", status=404,
|
||||||
errcode="phone_number_unoccupied",
|
errcode="phone_number_unoccupied",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -247,7 +247,7 @@ class ProvisioningAPI(AuthAPI):
|
|||||||
"group": "chat",
|
"group": "chat",
|
||||||
}[type]
|
}[type]
|
||||||
|
|
||||||
portal = Portal(tgid=None, mxid=room_id, title=title, about=about, peer_type=type)
|
portal = Portal(tgid=TelegramID(0), mxid=room_id, title=title, about=about, peer_type=type)
|
||||||
try:
|
try:
|
||||||
await portal.create_telegram_chat(user, supergroup=supergroup)
|
await portal.create_telegram_chat(user, supergroup=supergroup)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: future_fstrings -*-
|
# -*- coding: future_fstrings -*-
|
||||||
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
# mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
# Copyright (C) 2018 Tulir Asokan
|
# Copyright (C) 2019 Tulir Asokan
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* mautrix-telegram - A Matrix-Telegram puppeting bridge
|
* mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
* Copyright (C) 2018 Tulir Asokan
|
* Copyright (C) 2019 Tulir Asokan
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!--
|
<!--
|
||||||
mautrix-telegram - A Matrix-Telegram puppeting bridge
|
mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
Copyright (C) 2018 Tulir Asokan
|
Copyright (C) 2019 Tulir Asokan
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!--
|
<!--
|
||||||
mautrix-telegram - A Matrix-Telegram puppeting bridge
|
mautrix-telegram - A Matrix-Telegram puppeting bridge
|
||||||
Copyright (C) 2018 Tulir Asokan
|
Copyright (C) 2019 Tulir Asokan
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
|||||||
Reference in New Issue
Block a user