Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def react_to_message_status(self, status: ReactToMessage):
if self.accept_message_reactions == "reject_one":
raise EFBMessageReactionNotPossible("Message reaction is rejected by flag.")
if self.accept_message_reactions == "reject_all":
raise EFBOperationNotSupported("All message reactions are rejected by flag.")
message = self.messages_sent.get(status.msg_id)
if message is None:
raise EFBOperationNotSupported("Message is not found.")
if status.reaction is None:
for idx, i in message.reactions.items():
message.reactions[idx] = [j for j in i if not isinstance(j, SelfChatMember)]
else:
if status.reaction not in message.reactions:
message.reactions[status.reaction] = []
message.reactions[status.reaction].append(message.chat.self)
coordinator.send_status(MessageReactionsUpdate(
chat=message.chat,
msg_id=message.uid,
reactions=message.reactions
))
def react_to_message_status(self, status: ReactToMessage):
if self.accept_message_reactions == "reject_one":
raise EFBMessageReactionNotPossible("Message reaction is rejected by flag.")
if self.accept_message_reactions == "reject_all":
raise EFBOperationNotSupported("All message reactions are rejected by flag.")
message = self.messages_sent.get(status.msg_id)
if message is None:
raise EFBOperationNotSupported("Message is not found.")
if status.reaction is None:
for idx, i in message.reactions.items():
message.reactions[idx] = [j for j in i if not isinstance(j, SelfChatMember)]
else:
if status.reaction not in message.reactions:
message.reactions[status.reaction] = []
message.reactions[status.reaction].append(message.chat.self)
coordinator.send_status(MessageReactionsUpdate(
chat=message.chat,
msg_id=message.uid,
reactions=message.reactions
def send_status(self, status: 'Status'):
if isinstance(status, MessageRemoval):
if not isinstance(status.message.author, SelfChatMember):
raise EFBMessageError(self._('You can only recall your own messages.'))
try:
uid_type = status.message.uid.split('_')
self.recall_message(uid_type[1])
except CoolQAPIFailureException:
raise EFBMessageError(
self._('Failed to recall the message. This message may have already expired.'))
else:
raise EFBOperationNotSupported()
# todo
"Target Chat: %s\n"
"Target uid: %s\n",
msg.uid,
msg.chat.chat_uid, msg.type, msg.text, repr(msg.target.chat), msg.target.uid)
"""
m = QQMsgProcessor(instance=self)
chat_type = msg.chat.uid.split('_')
self.logger.debug('[%s] Is edited: %s', msg.uid, msg.edit)
if msg.edit:
if self.client_config['is_pro']:
try:
uid_type = msg.uid.split('_')
self.recall_message(uid_type[1])
except CoolQAPIFailureException:
raise EFBOperationNotSupported(self._("Failed to recall the message!\n"
"This message may have already expired."))
if msg.type in [MsgType.Text, MsgType.Link]:
if msg.text == "kick`":
group_id = chat_type[1]
user_id = msg.target.author.uid
self.coolq_api_query("set_group_kick",
group_id=group_id,
user_id=user_id)
else:
if isinstance(msg.target, Message):
max_length = 50
tgt_text = coolq_text_encode(process_quote_text(msg.target.text, max_length))
tgt_alias = ""
if chat_type[0] != 'private' and not isinstance(msg.target.author, SelfChatMember):
tgt_alias += m.coolq_code_at_wrapper(msg.target.author.uid)
"You cannot react to this message.").format(channel_id))
return
try:
chat_obj = channel.get_chat(chat_uid)
except EFBChatNotFound:
message.reply_text(self._("The chat involved in this message ({}) is not found. "
"You cannot react to this message.").format(chat_uid))
return
if reaction == "-":
reaction = None
try:
coordinator.send_status(ReactToMessage(chat=chat_obj, msg_id=message_id, reaction=reaction))
except EFBOperationNotSupported:
message.reply_text(self._("You cannot react anything to this message."))
return
except EFBMessageReactionNotPossible:
prompt = self._("{} is not accepted as a reaction to this message.").format(reaction)
if channel.suggested_reactions:
# TRANSLATORS: {} is a list of names of possible reactions, separated with comma.
prompt += "\n" + self._("You may want to try: {}").format(", ".join(channel.suggested_reactions[:10]))
message.reply_text(prompt)
return
len(names)).format(count=len(names), list=members)
if desc:
try:
self.bot.set_chat_description(
tg_chat, self.truncate_ellipsis(desc, self.MAX_LEN_CHAT_DESC))
except BadRequest as e:
if "Chat description is not modified" in e.message:
pass
else:
self.logger.exception("Exception occurred while trying to update chat description: %s", e)
except TelegramError as e: # description is not updated
self.logger.exception("Exception occurred while trying to update chat description: %s", e)
picture = channel.get_chat_picture(chat)
if not picture:
raise EFBOperationNotSupported()
pic_img = Image.open(picture)
if pic_img.size[0] < self.TELEGRAM_MIN_PROFILE_PICTURE_SIZE or \
pic_img.size[1] < self.TELEGRAM_MIN_PROFILE_PICTURE_SIZE:
# resize
scale = self.TELEGRAM_MIN_PROFILE_PICTURE_SIZE / min(pic_img.size)
pic_resized = io.BytesIO()
pic_img.resize(tuple(map(lambda a: int(scale * a), pic_img.size)), Image.BICUBIC) \
.save(pic_resized, 'PNG')
pic_resized.seek(0)
picture.seek(0)
self.bot.set_chat_photo(tg_chat, pic_resized or picture)
update.message.reply_text(self._('Chat details updated.'))
except EFBChatNotFound:
if isinstance(status, MessageRemoval):
if not isinstance(status.message.author, SelfChatMember):
raise EFBOperationNotSupported(
self._('You can only recall your own messages.'))
if status.message.uid:
try:
msg_ids = json.loads(status.message.uid)
except JSONDecodeError:
raise EFBMessageError(
self._("ID of the message to recall is invalid."))
else:
raise EFBMessageError(
self._("ID of the message to recall is not found."))
failed = 0
if any(len(i) == 1 for i in msg_ids): # Message is not sent through EWS
raise EFBOperationNotSupported(
self._("You may only recall messages sent via EWS.")
)
for i in msg_ids:
try:
ews_utils.message_id_to_dummy_message(i, self).recall()
except wxpy.ResponseError:
failed += 1
if failed:
raise EFBMessageError(
self.ngettext(
'Failed to recall {failed} of {total} message.',
'Failed to recall {failed} of {total} messages.',
len(msg_ids)
).format(failed=failed, total=len(msg_ids)))
else:
val = (status.message.uid, len(msg_ids))
def get_message_by_id(self, chat: Chat, msg_id: MessageID) -> Optional['Message']:
raise EFBOperationNotSupported()
ews_utils.message_id_to_dummy_message(i, self).recall()
except wxpy.ResponseError as e:
self.logger.error(
"[%s] Trying to recall message but failed: %s", msg.uid, e)
failed += 1
if failed:
raise EFBMessageError(
self.ngettext('Failed to recall {failed} out of {total} message, edited message was not sent.',
'Failed to recall {failed} out of {total} messages, edited message was not sent.',
len(msg_ids)).format(
failed=failed,
total=len(msg_ids)
))
# Not caching message ID as message recall feedback is not needed in edit mode
else:
raise EFBOperationNotSupported()
if send_text_only or msg.type in [MsgType.Text, MsgType.Link]:
if isinstance(msg.target, Message):
max_length = self.flag("max_quote_length")
qt_txt = msg.target.text or msg.target.type.name
if max_length > 0:
if len(qt_txt) >= max_length:
tgt_text = qt_txt[:max_length]
tgt_text += "…"
else:
tgt_text = qt_txt
elif max_length < 0:
tgt_text = qt_txt
else:
tgt_text = ""
if isinstance(chat, wxpy.Group) and not isinstance(msg.target.author, SelfChatMember):
tgt_alias = "@%s\u2005:" % msg.target.author.display_name