Add support for sending and receiving dice
This commit is contained in:
@@ -24,7 +24,7 @@ from telethon.errors import (InviteHashInvalidError, InviteHashExpiredError, Opt
|
|||||||
TakeoutInitDelayError)
|
TakeoutInitDelayError)
|
||||||
from telethon.tl.patched import Message
|
from telethon.tl.patched import Message
|
||||||
from telethon.tl.types import (User as TLUser, TypeUpdates, MessageMediaGame, MessageMediaPoll,
|
from telethon.tl.types import (User as TLUser, TypeUpdates, MessageMediaGame, MessageMediaPoll,
|
||||||
TypeInputPeer)
|
TypeInputPeer, InputMediaDice)
|
||||||
from telethon.tl.types.messages import BotCallbackAnswer
|
from telethon.tl.types.messages import BotCallbackAnswer
|
||||||
from telethon.tl.functions.messages import (ImportChatInviteRequest, CheckChatInviteRequest,
|
from telethon.tl.functions.messages import (ImportChatInviteRequest, CheckChatInviteRequest,
|
||||||
GetBotCallbackAnswerRequest, SendVoteRequest)
|
GetBotCallbackAnswerRequest, SendVoteRequest)
|
||||||
@@ -104,7 +104,7 @@ async def pm(evt: CommandEvent) -> EventID:
|
|||||||
return await evt.reply("**Usage:** `$cmdprefix+sp pm <user identifier>`")
|
return await evt.reply("**Usage:** `$cmdprefix+sp pm <user identifier>`")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
id = "".join(evt.args).translate({ord(c):None for c in "+()- "})
|
id = "".join(evt.args).translate({ord(c): None for c in "+()- "})
|
||||||
user = await evt.sender.client.get_entity(id)
|
user = await evt.sender.client.get_entity(id)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return await evt.reply("Invalid user identifier or user not found.")
|
return await evt.reply("Invalid user identifier or user not found.")
|
||||||
@@ -308,6 +308,15 @@ async def vote(evt: CommandEvent) -> EventID:
|
|||||||
return await evt.mark_read()
|
return await evt.mark_read()
|
||||||
|
|
||||||
|
|
||||||
|
@command_handler(help_section=SECTION_MISC,
|
||||||
|
help_text="Roll a dice on the Telegram servers.")
|
||||||
|
async def roll(evt: CommandEvent) -> EventID:
|
||||||
|
if not evt.is_portal:
|
||||||
|
return await evt.reply("You can only roll dice in portal rooms")
|
||||||
|
portal = po.Portal.get_by_mxid(evt.room_id)
|
||||||
|
await evt.sender.client.send_media(await portal.get_input_entity(evt.sender), InputMediaDice())
|
||||||
|
|
||||||
|
|
||||||
@command_handler(help_section=SECTION_PORTAL_MANAGEMENT,
|
@command_handler(help_section=SECTION_PORTAL_MANAGEMENT,
|
||||||
help_args="<_number of messages_> [--takeout]",
|
help_args="<_number of messages_> [--takeout]",
|
||||||
help_text="Backfill messages from Telegram history.")
|
help_text="Backfill messages from Telegram history.")
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ from telethon.tl.types import (
|
|||||||
MessageMediaPoll, MessageActionChannelCreate, MessageActionChatAddUser,
|
MessageMediaPoll, MessageActionChannelCreate, MessageActionChatAddUser,
|
||||||
MessageActionChatCreate, MessageActionChatDeletePhoto, MessageActionChatDeleteUser,
|
MessageActionChatCreate, MessageActionChatDeletePhoto, MessageActionChatDeleteUser,
|
||||||
MessageActionChatEditPhoto, MessageActionChatEditTitle, MessageActionChatJoinedByLink,
|
MessageActionChatEditPhoto, MessageActionChatEditTitle, MessageActionChatJoinedByLink,
|
||||||
MessageActionChatMigrateTo, MessageActionChannelMigrateFrom, MessageActionGameScore,
|
MessageActionChatMigrateTo, MessageActionGameScore, MessageMediaDocument, MessageMediaGeo,
|
||||||
MessageMediaDocument, MessageMediaGeo, MessageMediaPhoto, MessageMediaUnsupported,
|
MessageMediaPhoto, MessageMediaDice, MessageMediaGame, MessageMediaUnsupported, PeerUser,
|
||||||
MessageMediaGame, PeerUser, PhotoCachedSize, TypeChannelParticipant, TypeChatParticipant,
|
PhotoCachedSize, TypeChannelParticipant, TypeChatParticipant, TypeDocumentAttribute,
|
||||||
TypeDocumentAttribute, TypeMessageAction, TypePhotoSize, PhotoSize, UpdateChatUserTyping,
|
TypeMessageAction, TypePhotoSize, PhotoSize, UpdateChatUserTyping, UpdateUserTyping,
|
||||||
UpdateUserTyping, MessageEntityPre, ChatPhotoEmpty)
|
MessageEntityPre, ChatPhotoEmpty)
|
||||||
|
|
||||||
from mautrix.appservice import IntentAPI
|
from mautrix.appservice import IntentAPI
|
||||||
from mautrix.types import (EventID, UserID, ImageInfo, ThumbnailInfo, RelatesTo, MessageType,
|
from mautrix.types import (EventID, UserID, ImageInfo, ThumbnailInfo, RelatesTo, MessageType,
|
||||||
@@ -74,6 +74,8 @@ class PortalTelegram(BasePortal, ABC):
|
|||||||
async def _send_message(self, intent: IntentAPI, content: MessageEventContent,
|
async def _send_message(self, intent: IntentAPI, content: MessageEventContent,
|
||||||
event_type: EventType = EventType.ROOM_MESSAGE, **kwargs) -> EventID:
|
event_type: EventType = EventType.ROOM_MESSAGE, **kwargs) -> EventID:
|
||||||
if self.encrypted and self.matrix.e2ee:
|
if self.encrypted and self.matrix.e2ee:
|
||||||
|
if intent.api.is_real_user:
|
||||||
|
content[intent.api.real_user_content_key] = True
|
||||||
event_type, content = await self.matrix.e2ee.encrypt(self.mxid, event_type, content)
|
event_type, content = await self.matrix.e2ee.encrypt(self.mxid, event_type, content)
|
||||||
return await intent.send_message_event(self.mxid, event_type, content, **kwargs)
|
return await intent.send_message_event(self.mxid, event_type, content, **kwargs)
|
||||||
|
|
||||||
@@ -293,6 +295,17 @@ class PortalTelegram(BasePortal, ABC):
|
|||||||
await intent.set_typing(self.mxid, is_typing=False)
|
await intent.set_typing(self.mxid, is_typing=False)
|
||||||
return await self._send_message(intent, content, timestamp=evt.date)
|
return await self._send_message(intent, content, timestamp=evt.date)
|
||||||
|
|
||||||
|
async def handle_telegram_dice(self, source: 'AbstractUser', intent: IntentAPI, evt: Message,
|
||||||
|
relates_to: RelatesTo) -> EventID:
|
||||||
|
content = TextMessageEventContent(
|
||||||
|
msgtype=MessageType.TEXT, format=Format.HTML,
|
||||||
|
body=f"Dice roll result: {evt.media.value}",
|
||||||
|
formatted_body=f'<h4>Dice roll result: {evt.media.value}</h4>',
|
||||||
|
relates_to=relates_to, external_url=self._get_external_url(evt))
|
||||||
|
content["net.maunium.telegram.dice"] = evt.media.value
|
||||||
|
await intent.set_typing(self.mxid, is_typing=False)
|
||||||
|
return await self._send_message(intent, content, timestamp=evt.date)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _int_to_bytes(i: int) -> bytes:
|
def _int_to_bytes(i: int) -> bytes:
|
||||||
hex_value = "{0:010x}".format(i)
|
hex_value = "{0:010x}".format(i)
|
||||||
@@ -457,7 +470,8 @@ class PortalTelegram(BasePortal, ABC):
|
|||||||
await sender.update_info(source, entity)
|
await sender.update_info(source, entity)
|
||||||
|
|
||||||
allowed_media = (MessageMediaPhoto, MessageMediaDocument, MessageMediaGeo,
|
allowed_media = (MessageMediaPhoto, MessageMediaDocument, MessageMediaGeo,
|
||||||
MessageMediaGame, MessageMediaPoll, MessageMediaUnsupported)
|
MessageMediaGame, MessageMediaDice, MessageMediaPoll,
|
||||||
|
MessageMediaUnsupported)
|
||||||
media = evt.media if hasattr(evt, "media") and isinstance(evt.media,
|
media = evt.media if hasattr(evt, "media") and isinstance(evt.media,
|
||||||
allowed_media) else None
|
allowed_media) else None
|
||||||
if sender:
|
if sender:
|
||||||
@@ -476,6 +490,7 @@ class PortalTelegram(BasePortal, ABC):
|
|||||||
MessageMediaDocument: self.handle_telegram_document,
|
MessageMediaDocument: self.handle_telegram_document,
|
||||||
MessageMediaGeo: self.handle_telegram_location,
|
MessageMediaGeo: self.handle_telegram_location,
|
||||||
MessageMediaPoll: self.handle_telegram_poll,
|
MessageMediaPoll: self.handle_telegram_poll,
|
||||||
|
MessageMediaDice: self.handle_telegram_dice,
|
||||||
MessageMediaUnsupported: self.handle_telegram_unsupported,
|
MessageMediaUnsupported: self.handle_telegram_unsupported,
|
||||||
MessageMediaGame: self.handle_telegram_game,
|
MessageMediaGame: self.handle_telegram_game,
|
||||||
}[type(media)](source, intent, evt,
|
}[type(media)](source, intent, evt,
|
||||||
|
|||||||
+1
-1
@@ -5,5 +5,5 @@ python-magic>=0.4,<0.5
|
|||||||
commonmark>=0.8,<0.10
|
commonmark>=0.8,<0.10
|
||||||
aiohttp>=3,<4
|
aiohttp>=3,<4
|
||||||
mautrix==0.5.0.beta10
|
mautrix==0.5.0.beta10
|
||||||
telethon>=1.10,<1.12
|
telethon>=1.12,<1.13
|
||||||
telethon-session-sqlalchemy>=0.2.14,<0.3
|
telethon-session-sqlalchemy>=0.2.14,<0.3
|
||||||
|
|||||||
Reference in New Issue
Block a user