def sendMessage(self, pair):
        pinEmoji = "\U0001f4cc"
        failures = 0
        while failures < self.maxSendFail:
            try:
                if (pair[1] != None):
                    keyboard = [[
                        InlineKeyboardButton(pinEmoji + " Vai al prodotto",
                                             url=pair[1])
                    ]]
                    replyMarkup = InlineKeyboardMarkup(keyboard)
                    self.bot.send_message(chat_id=self.chat_id,
                                          text=pair[0],
                                          disable_web_page_preview=False,
                                          parse_mode=ParseMode.HTML,
                                          reply_markup=json.dumps(
                                              replyMarkup.to_dict()))
                else:
                    self.bot.send_message(chat_id=self.chat_id,
                                          text=pair[0],
                                          disable_web_page_preview=False,
                                          parse_mode=ParseMode.HTML)
                time.sleep(
                    0.5
                )  # just to not get often TimedOut by Telegram so we don't get banned

            except RetryAfter as rtrExc:
                time.sleep(rtrExc.retry_after)
                failures += 1
            except TeleTimedOut:
                time.sleep(self.sleepAfterTimeout)
                failures += 1
            else:
                break
Exemplo n.º 2
0
def send_message(chat_id, text, reply_markup: InlineKeyboardMarkup = None):
    params = {"chat_id": chat_id, "text": text}
    if reply_markup is not None:
        print(reply_markup.to_dict())
        params = {**params, "reply_markup": reply_markup.to_json()}
    message = send_request(constant.SEND_MESSAGE, params)
    return message
Exemplo n.º 3
0
def transform_markup_to_str(markup: InlineKeyboardMarkup) -> str:
    """
    transform telegram.InlineKeyboardMarkup object to str to serialize it
    :param markup: markup to be serialized
    :return: json str
    """
    return json.dumps(markup.to_dict())
Exemplo n.º 4
0
def is_equal_inline_keyboards(keyboard_1: InlineKeyboardPaginator, keyboard_2: InlineKeyboardMarkup) -> bool:
    keyboard_1 = keyboard_1.keyboard
    keyboard_1_data = [x['text'] for x in keyboard_1]

    keyboard_2 = keyboard_2.to_dict()['inline_keyboard'][0]
    keyboard_2_data = [x['text'] for x in keyboard_2]

    return keyboard_1_data == keyboard_2_data
Exemplo n.º 5
0
def get_inline_buttons(options):
    custom_keyboard = []
    for option in options:
        custom_keyboard.append(
            InlineKeyboardButton(text=option, callback_data=option))
    custom_keyboard = [custom_keyboard]
    reply_markup = InlineKeyboardMarkup(custom_keyboard)
    return json.dumps(reply_markup.to_dict())
Exemplo n.º 6
0
 def send_payment_approval_message(self, message, callback_data):
     reply_markup = InlineKeyboardMarkup(
         [[InlineKeyboardButton("Approve", callback_data=callback_data)]])
     data = {
         'chat_id': self.app_variables.approval_group_chat_id,
         'text': message,
         'reply_markup': json.dumps(reply_markup.to_dict())
     }
     self.send(data)
Exemplo n.º 7
0
def is_equal_inline_keyboards(keyboard_1: Union[InlineKeyboardMarkup, str],
                              keyboard_2: InlineKeyboardMarkup) -> bool:
    if isinstance(keyboard_1, InlineKeyboardMarkup):
        keyboard_1_inline_keyboard = keyboard_1.to_dict()['inline_keyboard']
    elif isinstance(keyboard_1, str):
        keyboard_1_inline_keyboard = json.loads(keyboard_1)['inline_keyboard']
    else:
        raise Exception(f'Unsupported format (keyboard_1={type(keyboard_1)})!')

    keyboard_2_inline_keyboard = keyboard_2.to_dict()['inline_keyboard']
    return keyboard_1_inline_keyboard == keyboard_2_inline_keyboard
Exemplo n.º 8
0
    def test_create_reply_markup(self):
        """create_reply_markup returns same structures as if made manually"""

        # Single type: callback_data
        m1 = InlineKeyboardMarkup([[
            InlineKeyboardButton('single_data_t1',
                                 callback_data='single_data_d1'),
            InlineKeyboardButton('single_data_t2',
                                 callback_data='single_data_d2'),
        ]])

        m2 = create_reply_markup([
            ('single_data_t1', 'single_data_d1'),
            ('single_data_t2', 'single_data_d2'),
        ])

        self.assertDictEqual(
            m1.to_dict(), m2.to_dict(),
            'single type (callback_data) reply_markup not working')

        # Multiple rows single type
        m1 = InlineKeyboardMarkup([
            [
                InlineKeyboardButton('multirow_single_t1',
                                     callback_data='multirow_single_d1')
            ],
            [
                InlineKeyboardButton('multirow_single_t2',
                                     callback_data='multirow_single_d2')
            ],
        ])

        m2 = create_reply_markup(
            [('multirow_single_t1', 'multirow_single_d1')],
            [('multirow_single_t2', 'multirow_single_d2')],
        )

        self.assertDictEqual(
            m1.to_dict(), m2.to_dict(),
            'multiple rows single type reply_markup not working')
Exemplo n.º 9
0
 def send_question(self, text, buttons, chat_id):
     url = self.base + "sendMessage"
     keyboard_ = [
         InlineKeyboardButton(i[0], callback_data=i[1]) for i in buttons
     ]
     keyboard = [keyboard_[i:i + 2]
                 for i in range(0, len(buttons), 2)][::-1]
     reply_markup = InlineKeyboardMarkup(keyboard)
     data = {
         "chat_id": chat_id,
         "text": text,
         "reply_markup": json.dumps(reply_markup.to_dict())
     }
     requests.post(url, data=data)
Exemplo n.º 10
0
 def sendMessageBotonUs(self, telegrams):
     keyboard = [
         [InlineKeyboardButton("Boton 1", callback_data="1")],
         [InlineKeyboardButton("Boton 2", url="t.me/")],
     ]
     reply_markup = InlineKeyboardMarkup(keyboard)
     text = "Hola, ___________________\n\nCódigo de Verificación: {code}"
     url = "https://api.telegram.org/bot1648966134:AAHx-qSTyHAbek-ShU6XJ942npwYeFbRT8U/sendMessage"
     dato = {
         "chat_id": telegrams[0][0],
         "text": text.format(code=telegrams[0][2]),
         "reply_markup": json.dumps(reply_markup.to_dict()),
     }
     requests.post(url, data=dato)
Exemplo n.º 11
0
def get_poll_buttons(options, selected):
    markup = []
    options_keyboard = []
    selected_keyboard = []

    for value1, value2 in zip(options, selected):
        options_keyboard.append([
            InlineKeyboardButton(text=value1, callback_data=value1),
            InlineKeyboardButton(text=value2, callback_data=value2)
        ])

        reply_markup = InlineKeyboardMarkup(options_keyboard,
                                            one_time_keyboard=True)
    return json.dumps(reply_markup.to_dict())
Exemplo n.º 12
0
 def set_assignee(self, update, assignee):
     print(assignee.name)
     self.task_to=assignee
     self.author.task_assignee_set=False
     keys=InlineKeyboardMarkup([[InlineKeyboardButton(name.decode(), callback_data='user_change__'+self.task_id+\
                                 '__'+self.jira_users[name]) for name in self.jira_users]])
     print(keys.to_dict())
     self.bot.sendMessage(chat_id=update.message.chat_id, text=inline_assignee_message[self.lang].format(\
                     assignee.name), reply_markup=keys)
     keys=ReplyKeyboardMarkup(keyboard=[[comm for comm in task_commands[self.lang].values()],[cancel_key[self.lang],\
                              send_task_key[self.lang]]], resize_keyboard=True)
     if self.task_text == None:
         self.bot.sendMessage(chat_id=update.message.chat_id, text=task_create_message[self.lang], reply_markup=keys)
     else:
         self.bot.sendMessage(chat_id=update.message.chat_id, text=task_is_ready_message[self.lang], reply_markup=keys)
Exemplo n.º 13
0
 def sendMessangeBotones(self, text, update):
     keyboard = [
         [
             InlineKeyboardButton(
                 "Verificar C4: " + update.message.text.upper(), callback_data="1"
             )
         ],
         [
             InlineKeyboardButton(
                 "Chat con " + update.message.chat.first_name,
                 url="t.me/" + update.message.chat.username,
             )
         ],
     ]
     reply_markup = InlineKeyboardMarkup(keyboard)
     url = "https://api.telegram.org/bot1679535422:AAGkx_4iJ5qavz_EgrEu6RePwU3c7KAIm3E/sendMessage"
     dato = {
         "chat_id": "1166478986",
         "text": text,
         "reply_markup": json.dumps(reply_markup.to_dict()),
     }
     requests.post(url, data=dato)
def is_equal_inline_keyboards(keyboard_1: InlineKeyboardMarkup,
                              keyboard_2: InlineKeyboardMarkup) -> bool:
    keyboard_1 = keyboard_1.to_dict()['inline_keyboard']
    keyboard_2 = keyboard_2.to_dict()['inline_keyboard']
    return keyboard_1 == keyboard_2
Exemplo n.º 15
0
    def test_create_reply_markup(self):
        '''create_reply_markup returns same structures as if made manually'''

        # Single type: callback_data
        m1 = InlineKeyboardMarkup([[
            InlineKeyboardButton('single_data_t1', callback_data='single_data_d1'),
            InlineKeyboardButton('single_data_t2', callback_data='single_data_d2'),
        ]])

        m2 = create_reply_markup([
            ('single_data_t1', 'single_data_d1'),
            ('single_data_t2', 'single_data_d2'),
        ])

        self.assertDictEqual(
            m1.to_dict(), m2.to_dict(),
            'single type (callback_data) reply_markup not working'
        )

        # Single type: url
        m1 = InlineKeyboardMarkup([[
            InlineKeyboardButton('single_data_t1', url='single_data_u1'),
            InlineKeyboardButton('single_data_t2', url='single_data_u2'),
        ]])

        m2 = create_reply_markup([
            ('single_data_t1', None, 'single_data_u1'),
            ('single_data_t2', None, 'single_data_u2'),
        ])

        self.assertDictEqual(
            m1.to_dict(), m2.to_dict(),
            'single type (url) reply_markup not working'
        )

        # Mixed type: callback_data and url
        m1 = InlineKeyboardMarkup([[
            InlineKeyboardButton('mixed_t1', callback_data='mixed_d1'),
            InlineKeyboardButton('mixed_t2', url='mixed_u1'),
            InlineKeyboardButton('mixed_t3', callback_data='mixed_d2'),
            InlineKeyboardButton('mixed_t4', url='mixed_u2'),
        ]])

        m2 = create_reply_markup([
            ('mixed_t1', 'mixed_d1'),
            ('mixed_t2', None, 'mixed_u1'),
            ('mixed_t3', 'mixed_d2'),
            ('mixed_t4', None, 'mixed_u2'),
        ])

        self.assertDictEqual(
            m1.to_dict(), m2.to_dict(),
            'mixed types reply_markup not working'
        )

        # Multiple rows single type
        m1 = InlineKeyboardMarkup([
            [InlineKeyboardButton('multirow_single_t1', callback_data='multirow_single_d1')],
            [InlineKeyboardButton('multirow_single_t2', callback_data='multirow_single_d2')],
        ])

        m2 = create_reply_markup(
            [('multirow_single_t1', 'multirow_single_d1')],
            [('multirow_single_t2', 'multirow_single_d2')],
        )

        self.assertDictEqual(
            m1.to_dict(), m2.to_dict(),
            'multiple rows single type reply_markup not working'
        )

        # Multiple rows multiple type
        m1 = InlineKeyboardMarkup([
            [InlineKeyboardButton('multirow_mult_t1', callback_data='multirow_mult_d1')],
            [InlineKeyboardButton('multirow_mult_t2', url='multirow_mult_u1')],
            [InlineKeyboardButton('multirow_mult_t3', callback_data='multirow_mult_d2')],
            [InlineKeyboardButton('multirow_mult_t4', url='multirow_mult_u2')],
        ])

        m2 = create_reply_markup(
            [('multirow_mult_t1', 'multirow_mult_d1')],
            [('multirow_mult_t2', None, 'multirow_mult_u1')],
            [('multirow_mult_t3', 'multirow_mult_d2')],
            [('multirow_mult_t4', None, 'multirow_mult_u2')],
        )

        self.assertDictEqual(
            m1.to_dict(), m2.to_dict(),
            'multiple rows multiple type reply_markup not working'
        )