diff --git a/alembic/versions/ec1d3dcc77e9_switch_telegram_ids_to_bigints.py b/alembic/versions/ec1d3dcc77e9_switch_telegram_ids_to_bigints.py
new file mode 100644
index 00000000..5cffb99b
--- /dev/null
+++ b/alembic/versions/ec1d3dcc77e9_switch_telegram_ids_to_bigints.py
@@ -0,0 +1,44 @@
+"""Switch Telegram IDs to bigints
+
+Revision ID: ec1d3dcc77e9
+Revises: 990f4395afc6
+Create Date: 2021-03-09 21:36:58.443727
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+# revision identifiers, used by Alembic.
+revision = 'ec1d3dcc77e9'
+down_revision = '990f4395afc6'
+branch_labels = None
+depends_on = None
+
+
+columns_to_upgrade = (
+ ("bot_chat", "id"),
+ ("message", "tgid"),
+ ("message", "tg_space"),
+ ("portal", "tgid"),
+ ("portal", "tg_receiver"),
+ ("puppet", "id"),
+ ("puppet", "displayname_source"),
+ ("user", "tgid"),
+ ("user_portal", "user"),
+ ("user_portal", "portal"),
+ ("user_portal", "portal_receiver"),
+ ("contact", "user"),
+ ("contact", "contact"),
+)
+
+
+def upgrade():
+ if op.get_context().dialect.name == "postgresql":
+ for table, column in columns_to_upgrade:
+ op.alter_column(table, column, existing_type=sa.Integer, type_=sa.BigInteger)
+
+
+def downgrade():
+ if op.get_context().dialect.name == "postgresql":
+ for table, column in columns_to_upgrade:
+ op.alter_column(table, column, existing_type=sa.BigInteger, type_=sa.Integer)
diff --git a/mautrix_telegram/db/bot_chat.py b/mautrix_telegram/db/bot_chat.py
index 449afbe1..d7ecdc52 100644
--- a/mautrix_telegram/db/bot_chat.py
+++ b/mautrix_telegram/db/bot_chat.py
@@ -15,7 +15,7 @@
# along with this program. If not, see .
from typing import Iterable
-from sqlalchemy import Column, Integer, String
+from sqlalchemy import Column, BigInteger, String
from mautrix.util.db import Base
@@ -25,7 +25,7 @@ from ..types import TelegramID
# Fucking Telegram not telling bots what chats they are in 3:<
class BotChat(Base):
__tablename__ = "bot_chat"
- id: TelegramID = Column(Integer, primary_key=True)
+ id: TelegramID = Column(BigInteger, primary_key=True)
type: str = Column(String, nullable=False)
@classmethod
diff --git a/mautrix_telegram/db/message.py b/mautrix_telegram/db/message.py
index a765650a..16c2a25d 100644
--- a/mautrix_telegram/db/message.py
+++ b/mautrix_telegram/db/message.py
@@ -15,8 +15,8 @@
# along with this program. If not, see .
from typing import Optional, Iterator, List
-from sqlalchemy import (Column, UniqueConstraint, Integer, String, Boolean, and_, func, desc,
- select, false)
+from sqlalchemy import (Column, UniqueConstraint, BigInteger, Integer, String, Boolean, and_, func,
+ desc, select, false)
from mautrix.types import RoomID, EventID
from mautrix.util.db import Base
@@ -29,8 +29,8 @@ class Message(Base):
mxid: EventID = Column(String)
mx_room: RoomID = Column(String)
- tgid: TelegramID = Column(Integer, primary_key=True)
- tg_space: TelegramID = Column(Integer, primary_key=True)
+ tgid: TelegramID = Column(BigInteger, primary_key=True)
+ tg_space: TelegramID = Column(BigInteger, primary_key=True)
edit_index: int = Column(Integer, primary_key=True)
redacted: bool = Column(Boolean, server_default=false())
diff --git a/mautrix_telegram/db/portal.py b/mautrix_telegram/db/portal.py
index 344509e6..a543cbe9 100644
--- a/mautrix_telegram/db/portal.py
+++ b/mautrix_telegram/db/portal.py
@@ -15,7 +15,7 @@
# along with this program. If not, see .
from typing import Optional, Iterable
-from sqlalchemy import Column, Integer, String, Boolean, Text, func, sql
+from sqlalchemy import Column, BigInteger, String, Boolean, Text, func, sql
from mautrix.types import RoomID, ContentURI
from mautrix.util.db import Base
@@ -27,8 +27,8 @@ class Portal(Base):
__tablename__ = "portal"
# Telegram chat information
- tgid: TelegramID = Column(Integer, primary_key=True)
- tg_receiver: TelegramID = Column(Integer, primary_key=True)
+ tgid: TelegramID = Column(BigInteger, primary_key=True)
+ tg_receiver: TelegramID = Column(BigInteger, primary_key=True)
peer_type: str = Column(String, nullable=False)
megagroup: bool = Column(Boolean)
diff --git a/mautrix_telegram/db/puppet.py b/mautrix_telegram/db/puppet.py
index 0dd29a2d..14ab6d3f 100644
--- a/mautrix_telegram/db/puppet.py
+++ b/mautrix_telegram/db/puppet.py
@@ -15,7 +15,7 @@
# along with this program. If not, see .
from typing import Optional, Iterable
-from sqlalchemy import Column, Integer, String, Text, Boolean
+from sqlalchemy import Column, BigInteger, String, Text, Boolean
from sqlalchemy.sql import expression, func
from mautrix.types import UserID, SyncToken
@@ -27,13 +27,13 @@ from ..types import TelegramID
class Puppet(Base):
__tablename__ = "puppet"
- id: TelegramID = Column(Integer, primary_key=True)
+ id: TelegramID = Column(BigInteger, primary_key=True)
custom_mxid: UserID = Column(String, nullable=True)
access_token: str = Column(String, nullable=True)
next_batch: SyncToken = Column(String, nullable=True)
base_url: str = Column(Text, nullable=True)
displayname: str = Column(String, nullable=True)
- displayname_source: TelegramID = Column(Integer, nullable=True)
+ displayname_source: TelegramID = Column(BigInteger, nullable=True)
displayname_contact: bool = Column(Boolean, nullable=False, server_default=expression.true())
username: str = Column(String, nullable=True)
photo_id: str = Column(String, nullable=True)
diff --git a/mautrix_telegram/db/user.py b/mautrix_telegram/db/user.py
index 81affda2..a2b952ae 100644
--- a/mautrix_telegram/db/user.py
+++ b/mautrix_telegram/db/user.py
@@ -15,7 +15,7 @@
# along with this program. If not, see .
from typing import Optional, Iterable, Tuple
-from sqlalchemy import Column, ForeignKey, ForeignKeyConstraint, Integer, String, func
+from sqlalchemy import Column, ForeignKey, ForeignKeyConstraint, BigInteger, Integer, String, func
from mautrix.types import UserID
from mautrix.util.db import Base
@@ -27,7 +27,7 @@ class User(Base):
__tablename__ = "user"
mxid: UserID = Column(String, primary_key=True)
- tgid: Optional[TelegramID] = Column(Integer, nullable=True, unique=True)
+ tgid: Optional[TelegramID] = Column(BigInteger, nullable=True, unique=True)
tg_username: str = Column(String, nullable=True)
tg_phone: str = Column(String, nullable=True)
saved_contacts: int = Column(Integer, default=0, nullable=False)
@@ -91,10 +91,10 @@ class User(Base):
class UserPortal(Base):
__tablename__ = "user_portal"
- user: TelegramID = Column(Integer, ForeignKey("user.tgid", onupdate="CASCADE",
+ user: TelegramID = Column(BigInteger, ForeignKey("user.tgid", onupdate="CASCADE",
ondelete="CASCADE"), primary_key=True)
- portal: TelegramID = Column(Integer, primary_key=True)
- portal_receiver: TelegramID = Column(Integer, primary_key=True)
+ portal: TelegramID = Column(BigInteger, primary_key=True)
+ portal_receiver: TelegramID = Column(BigInteger, primary_key=True)
__table_args__ = (ForeignKeyConstraint(("portal", "portal_receiver"),
("portal.tgid", "portal.tg_receiver"),
@@ -104,5 +104,5 @@ class UserPortal(Base):
class Contact(Base):
__tablename__ = "contact"
- user: TelegramID = Column(Integer, ForeignKey("user.tgid"), primary_key=True)
- contact: TelegramID = Column(Integer, ForeignKey("puppet.id"), primary_key=True)
+ user: TelegramID = Column(BigInteger, ForeignKey("user.tgid"), primary_key=True)
+ contact: TelegramID = Column(BigInteger, ForeignKey("puppet.id"), primary_key=True)
diff --git a/optional-requirements.txt b/optional-requirements.txt
index 6d76309e..bb58d2ea 100644
--- a/optional-requirements.txt
+++ b/optional-requirements.txt
@@ -21,7 +21,7 @@ prometheus_client>=0.6,<0.10
psycopg2-binary>=2,<3
#/e2be
-asyncpg>=0.20,<0.22
+asyncpg>=0.20,<0.23
python-olm>=3,<4
pycryptodome>=3,<4
unpaddedbase64>=1,<2