Compare commits

..

16 Commits

Author SHA1 Message Date
Tulir Asokan cb9665f9ab Bump version to 0.7.2 2020-04-04 22:05:01 +03:00
Tulir Asokan 69ffdcfed6 Bump version to 0.7.2rc1 2020-02-08 13:32:25 +02:00
Tulir Asokan da72c51644 Only leave group chat portals with default puppet. Fixes #418 2020-02-08 13:28:07 +02:00
Tulir Asokan 62efc39eed Fix ignore_incoming_bot_events check in channels
Fixes #417
2020-02-08 13:28:07 +02:00
Tulir Asokan 07edcc4867 Bump version to 0.7.1 2020-02-04 22:31:09 +02:00
Tulir Asokan 65d7934c21 Add missing response to logout provisioning API endpoint 2020-01-28 22:49:48 +02:00
Tulir Asokan 842d98dc1c Bump version to 0.7.1rc2 2020-01-25 23:37:18 +02:00
Tulir Asokan b7e69ddc61 Fix relaybot messages being allowed through with ignore_own_incoming_events set 2020-01-25 23:36:17 +02:00
Tulir Asokan 82f7905367 Add note to Matrix->Telegram EDU bridging 2020-01-13 20:46:00 +02:00
Tulir Asokan 1d8699054c Merge pull request #409 from cubesky/master
Fix mautrix-python import error.
2020-01-12 23:21:18 +02:00
天空/立音 32c521cb79 Fix mautrix-python import error.
Because of mautrix-python library [API Changes](https://github.com/tulir/mautrix-python/commit/04d2ae4c3d4db5f8798f4f844caafb5d00606507). Database migration script is broken.
2020-01-13 02:46:26 +08:00
Tulir Asokan b4cf8cd451 Bump version to 0.7.1rc1 2020-01-11 20:08:47 +02:00
Tulir Asokan 80ff9d0f66 Precalculate list of channel IDs to get info for to fix #393 2020-01-11 20:07:21 +02:00
Tulir Asokan b0e60e60e4 Fix parameter name error in has_power_level call 2020-01-11 19:58:08 +02:00
Tulir Asokan c4b9a76931 Merge pull request #406 from Ma27/fix-tests
Fix several broken tests that were missing some required positional arguments
2019-12-28 14:56:21 +02:00
Maximilian Bosch fe52f0ad10 Fix several broken tests that were missing some required positional arguments 2019-12-28 13:00:39 +01:00
9 changed files with 28 additions and 13 deletions
+4 -3
View File
@@ -6,9 +6,9 @@
* [x] Message edits * [x] Message edits
* [ ] ‡ Message history * [ ] ‡ Message history
* [x] Presence * [x] Presence
* [x] Typing notifications * [x] Typing notifications*
* [x] Read receipts * [x] Read receipts*
* [x] Pinning messages * [x] Pinning messages*
* [x] Power level * [x] Power level
* [x] Normal chats * [x] Normal chats
* [ ] Non-hardcoded PL requirements * [ ] Non-hardcoded PL requirements
@@ -56,5 +56,6 @@
* [ ] ‡ Secret chats (not yet supported by Telethon) * [ ] ‡ Secret chats (not yet supported by Telethon)
* [ ] ‡ E2EE in Matrix rooms (not yet supported * [ ] ‡ E2EE in Matrix rooms (not yet supported
\* Requires [double puppeting](https://github.com/tulir/mautrix-telegram/wiki/Authentication#replacing-telegram-accounts-matrix-puppet-with-matrix-account) to be enabled
† Information not automatically sent from source, i.e. implementation may not be possible † Information not automatically sent from source, i.e. implementation may not be possible
‡ Maybe, i.e. this feature may or may not be implemented at some point ‡ Maybe, i.e. this feature may or may not be implemented at some point
+1 -1
View File
@@ -1,2 +1,2 @@
__version__ = "0.7.0" __version__ = "0.7.2"
__author__ = "Tulir Asokan <tulir@maunium.net>" __author__ = "Tulir Asokan <tulir@maunium.net>"
+3 -3
View File
@@ -97,7 +97,6 @@ class AbstractUser(ABC):
self.client = None self.client = None
self.is_relaybot = False self.is_relaybot = False
self.is_bot = False self.is_bot = False
self.relaybot = None
@property @property
def connected(self) -> bool: def connected(self) -> bool:
@@ -422,8 +421,9 @@ class AbstractUser(ABC):
f" in unbridged chat {portal.tgid_log}") f" in unbridged chat {portal.tgid_log}")
return return
if self.ignore_incoming_bot_events and self.relaybot and sender.id == self.relaybot.tgid: if ((self.ignore_incoming_bot_events and self.relaybot
self.log.debug(f"Ignoring relaybot-sent message %s to %s", update, portal.tgid_log) and sender and sender.id == self.relaybot.tgid)):
self.log.debug(f"Ignoring relaybot-sent message %s to %s", update.id, portal.tgid_log)
return return
if isinstance(update, MessageService): if isinstance(update, MessageService):
+2 -2
View File
@@ -108,9 +108,9 @@ class Bot(AbstractUser):
if isinstance(chat, ChatForbidden) or chat.left or chat.deactivated: if isinstance(chat, ChatForbidden) or chat.left or chat.deactivated:
self.remove_chat(TelegramID(chat.id)) self.remove_chat(TelegramID(chat.id))
channel_ids = (InputChannel(chat_id, 0) channel_ids = [InputChannel(chat_id, 0)
for chat_id, chat_type in self.chats.items() for chat_id, chat_type in self.chats.items()
if chat_type == "channel") if chat_type == "channel"]
for channel_id in channel_ids: for channel_id in channel_ids:
try: try:
await self.client(GetChannelsRequest([channel_id])) await self.client(GetChannelsRequest([channel_id]))
+1 -1
View File
@@ -222,7 +222,7 @@ class BasePortal(ABC):
return False return False
evt_type = EventType.find(f"net.maunium.telegram.{event}") evt_type = EventType.find(f"net.maunium.telegram.{event}")
evt_type.t_class = EventType.Class.STATE evt_type.t_class = EventType.Class.STATE
return self.main_intent.state_store.has_power_level(self.mxid, user.mxid, event=evt_type) return self.main_intent.state_store.has_power_level(self.mxid, user.mxid, evt_type)
def get_input_entity(self, user: 'AbstractUser' def get_input_entity(self, user: 'AbstractUser'
) -> Awaitable[Union[TypeInputPeer, TypeInputChannel]]: ) -> Awaitable[Union[TypeInputPeer, TypeInputChannel]]:
+5 -1
View File
@@ -25,7 +25,7 @@ from telethon.tl.types import (UserProfilePhoto, User, UpdateUserName, PeerUser,
from mautrix.appservice import AppService, IntentAPI from mautrix.appservice import AppService, IntentAPI
from mautrix.errors import MatrixRequestError from mautrix.errors import MatrixRequestError
from mautrix.bridge import CustomPuppetMixin from mautrix.bridge import CustomPuppetMixin
from mautrix.types import UserID, SyncToken from mautrix.types import UserID, SyncToken, RoomID
from mautrix.util.simple_template import SimpleTemplate from mautrix.util.simple_template import SimpleTemplate
from .types import TelegramID from .types import TelegramID
@@ -320,6 +320,10 @@ class Puppet(CustomPuppetMixin):
return True return True
return False return False
def default_puppet_should_leave_room(self, room_id: RoomID) -> bool:
portal: p.Portal = p.Portal.get_by_mxid(room_id)
return portal and not portal.backfilling and portal.peer_type != "user"
# endregion # endregion
# region Getters # region Getters
@@ -24,7 +24,8 @@ def log(message, end="\n"):
def connect(to): def connect(to):
from mautrix.bridge.db import Base, RoomState, UserProfile from mautrix.util.db import Base
from mautrix.bridge.db import RoomState, UserProfile
from mautrix_telegram.db import (Portal, Message, UserPortal, User, Contact, Puppet, BotChat, from mautrix_telegram.db import (Portal, Message, UserPortal, User, Contact, Puppet, BotChat,
TelegramFile) TelegramFile)
@@ -355,6 +355,7 @@ class ProvisioningAPI(AuthAPI):
if err is not None: if err is not None:
return err return err
await user.log_out() await user.log_out()
return web.json_response({}, status=200)
async def bridge_info(self, request: web.Request) -> web.Response: async def bridge_info(self, request: web.Request) -> web.Response:
return web.json_response({ return web.json_response({
+9 -1
View File
@@ -26,7 +26,7 @@ def context(request: FixtureRequest) -> Context:
""" """
# Config(path, registration_path, base_path) # Config(path, registration_path, base_path)
config = getattr(request.cls, 'config', Config("", "", "")) config = getattr(request.cls, 'config', Config("", "", ""))
return Context(az=Mock(), config=config, loop=Mock(), session_container=Mock(), bot=Mock()) return Context(az=Mock(), config=config, loop=Mock(), session_container=Mock(), bridge=Mock(), bot=Mock())
@pytest.fixture @pytest.fixture
@@ -52,6 +52,7 @@ class TestCommandEvent:
sender=u.User(UserID("@sender:example.org")), sender=u.User(UserID("@sender:example.org")),
command="help", command="help",
args=[], args=[],
content=Mock(),
is_management=True, is_management=True,
is_portal=False, is_portal=False,
) )
@@ -107,6 +108,7 @@ class TestCommandEvent:
sender=u.User(UserID("@sender:example.org")), sender=u.User(UserID("@sender:example.org")),
command="help", command="help",
args=[], args=[],
content=Mock(),
is_management=False, is_management=False,
is_portal=False, is_portal=False,
) )
@@ -133,6 +135,7 @@ class TestCommandEvent:
sender=u.User(UserID("@sender:example.org")), sender=u.User(UserID("@sender:example.org")),
command="help", command="help",
args=[], args=[],
content=Mock(),
is_management=True, is_management=True,
is_portal=False, is_portal=False,
) )
@@ -209,6 +212,7 @@ class TestCommandHandler:
sender=sender, sender=sender,
command=command, command=command,
args=[], args=[],
content=Mock(),
is_management=False, is_management=False,
is_portal=boolean, is_portal=boolean,
) )
@@ -271,6 +275,7 @@ class TestCommandHandler:
sender=sender, sender=sender,
command=command, command=command,
args=[], args=[],
content=Mock(),
is_management=is_management, is_management=is_management,
is_portal=boolean, is_portal=boolean,
) )
@@ -307,6 +312,7 @@ class TestCommandProcessor:
sender=sender, sender=sender,
command="hElp", command="hElp",
args=[], args=[],
content=Mock(),
is_management=boolean2[0], is_management=boolean2[0],
is_portal=boolean2[1]) is_portal=boolean2[1])
@@ -333,6 +339,7 @@ class TestCommandProcessor:
sender=sender, sender=sender,
command="foo", command="foo",
args=[], args=[],
content=Mock(),
is_management=boolean2[0], is_management=boolean2[0],
is_portal=boolean2[1], is_portal=boolean2[1],
) )
@@ -361,6 +368,7 @@ class TestCommandProcessor:
sender=sender, # u.User sender=sender, # u.User
command="foo", command="foo",
args=[], args=[],
content=Mock(),
is_management=boolean2[0], is_management=boolean2[0],
is_portal=boolean2[1] is_portal=boolean2[1]
) )