标签: python-telegram-bot

如何发送彩色短信?

我正在尝试使用sendMessageHTML解析向用户发送彩色文本消息作为回复.

bot.sendMessage(update.message.chat_id, "<span style=\"color:blue\">foo</span>", telegram.ParseMode.HTML)
Run Code Online (Sandbox Code Playgroud)

发送<span style="color:blue">foo</span>不起作用,因为span不支持:

错误请求:无法解析消息文本:字节偏移0(400)处不支持的开始标记"span"

我正在使用python-telegram-botv.4.0.3.

还有另外一种方法吗?

python python-3.x python-telegram-bot

8
推荐指数
1
解决办法
2万
查看次数

多个回调查询处理程序?

使用python-telegram-bot包装器可以使用多个回调查询处理程序吗?

我想拥有多个独特的处理程序,但据我所知,只能有一个.这意味着我必须根据我在启动消息文本上显示的内联键盘.

有什么我想念的吗?

python-telegram-bot

8
推荐指数
2
解决办法
8526
查看次数

使用 Python 从 Telegram 频道获取最后一条消息

我正在使用python-telegram-bot库在 Python 中编写一个机器人,该机器人将 URL 发送到该机器人是管理员的通道中。

现在,我想让机器人读取最后 5 条消息(我并不关心数字,因为我只需要阅读聊天中的消息)并将它们存储到代码中的列表中进一步阐述。

我已经让我的机器人使用:

bot = telegram.Bot(token='mytoken')
bot.sendMessage(chat_id='@mychatid', text=entry.link)
Run Code Online (Sandbox Code Playgroud)

但我在 python-telegram-bot 库中找不到一个bot.getLastMessage或某种类。bot.getMessage

如果还没有书面类可以做到这一点,我如何通过 Telegram API 来实现它,因为我在 API 实现方面还是个初学者?

谢谢。

python telegram python-telegram-bot telegram-bot telegram-api

8
推荐指数
1
解决办法
1万
查看次数

ImportError:无法从“telegram”导入名称“ParseMode”

我正在尝试创建一个电报机器人。我试图执行的代码是:

from telegram import ParseMode
Run Code Online (Sandbox Code Playgroud)

但它抛出了这个错误:

ImportError: cannot import name 'ParseMode' from 'telegram'
(C:\ProgramData\Anaconda3\lib\site-packages\telegram\__init__.py)
Run Code Online (Sandbox Code Playgroud)

您能告诉我如何修复这个错误吗?

python python-3.x telegram python-telegram-bot telegram-bot

8
推荐指数
2
解决办法
1万
查看次数

如何获取telegram群聊的主题id?

最近,Telegram 在 Bot API 版本 6.3 中添加了对组中主题的支持,并将此支持添加到 python-telegram-bot 版本 13.15 中(请查找更改日志https://docs.python-telegram-bot.org/en/stable/changelog.html

目前尚不清楚如何获取已启用主题的 Grpups 中主题的主题 ID (message_thread_id)。

有什么建议吗?

我正在尝试找到一种方法来获取电报群聊的主题 id。请注意,我说的是message_thread_id,请不要与chat_id混淆。

telegram python-telegram-bot

8
推荐指数
1
解决办法
1万
查看次数

如何使用 multipart/form-data 通过电报机器人发送照片

我有一个电报机器人(用 python 开发),我想通过它从我电脑中的图像发送/上传照片

所以我应该通过多部分表单数据来做。

但我不知道怎么做。我也没有在 Internet 和电报文档上找到有用的资源。

我试图通过下面的代码来做到这一点。但这是错误的

data = {'chat_id', chat_id}
            files = {'photo': open("./saved/{}.jpg".format(user_id), 'rb')}
            status = requests.post("https://api.telegram.org/bot<TOKEN>/sendPhoto",data=data, files=files)
Run Code Online (Sandbox Code Playgroud)

谁能帮我?

python multipartform-data python-telegram-bot

7
推荐指数
1
解决办法
7077
查看次数

如何在电报python bot中保存照片?

我想写一个电报机器人来保存照片。这是我的代码,但它不起作用。我不知道我的问题是什么?

def image_handler(bot, update):
    file = bot.getFile(update.message.photo.file_id)
    print ("file_id: " + str(update.message.photo.file_id))
    file.download('image.jpg')

updater.dispatcher.add_handler(MessageHandler(Filters.photo, image_handler))
updater.start_polling()
updater.idle()
Run Code Online (Sandbox Code Playgroud)

请帮我解决我的问题。

photo python-3.x python-telegram-bot telegram-bot

7
推荐指数
2
解决办法
7695
查看次数

使用python-telegram-bot构建菜单的正确方法

我与python-telegram-botBotFather机器人合作并尝试构建嵌套菜单系统.例如,您有一个通用的机器人菜单

pic.1

您可以在其中选择"编辑机器人"并获取新的相应菜单

pic.2

可以选择返回上一个菜单.

我尝试用代码实现:

# main menu
def start(bot, update):
    menu_main = [[InlineKeyboardButton('Option 1', callback_data='m1')],
                 [InlineKeyboardButton('Option 2', callback_data='m2')],
                 [InlineKeyboardButton('Option 3', callback_data='m3')]]
    reply_markup = InlineKeyboardMarkup(menu_main)
    update.message.reply_text('Choose the option:', reply_markup=reply_markup)

# all other menus
def menu_actions(bot, update):
    query = update.callback_query

    if query.data == 'm1':
        # first submenu
        menu_1 = [[InlineKeyboardButton('Submenu 1-1', callback_data='m1_1')],
                  [InlineKeyboardButton('Submenu 1-2', callback_data='m1_2')]]
        reply_markup = InlineKeyboardMarkup(menu_1)
        bot.edit_message_text(chat_id=query.message.chat_id,
                              message_id=query.message.message_id,
                              text='Choose the option:',
                              reply_markup=reply_markup)
    elif query.data == 'm2':
        # second submenu
        # first submenu
        menu_2 = [[InlineKeyboardButton('Submenu 2-1', callback_data='m2_1')],
                  [InlineKeyboardButton('Submenu …
Run Code Online (Sandbox Code Playgroud)

python bots menu telegram python-telegram-bot

7
推荐指数
2
解决办法
6443
查看次数

采样音频不会保留波(矢量)!

我做了一个Telegram机器人,它的工作之一就是从音频文件创建样本。现在,对于发送给它的大多数音频而言,样本都很好。像这样的东西:

在此处输入图片说明

但是,对于某些音频,样本看起来有些奇怪:

在此处输入图片说明

如您所见,此文件中的波未显示!(我可以向您保证声音不是空的)

为了创建示例,我使用pydub(谢谢James!)。这是我创建示例的部分:

song = AudioSegment.from_mp3('song.mp3')
sliced = song[start*1000:end*1000]
sliced.export('song.ogg', format='ogg', parameters=["-acodec", "libopus"])
Run Code Online (Sandbox Code Playgroud)

然后使用bot.send_voice方法发送样本。像这样

bot.send_voice(
    chat_id=update.message.chat.id,
    voice=open('song.ogg', 'rb'),
    caption=settings.caption,
    parse_mode=ParseMode.MARKDOWN,
    timeout=1000
)
Run Code Online (Sandbox Code Playgroud)

Telegram Bot API的文档说:

如果希望Telegram客户端将文件显示为可播放的语音消息,请使用此方法发送音频文件。为此,您的音频必须位于使用OPUS编码的.ogg文件中(其他格式可能以音频或文档的形式发送)。

这就是为什么在这行代码中:

sliced.export('song.ogg', format='ogg', parameters=["-acodec", "libopus"])
Run Code Online (Sandbox Code Playgroud)

我用过parameters=["-acodec", "libopus"]

谁能告诉我我在做什么错?提前致谢!

python audio pydub telegram python-telegram-bot

7
推荐指数
1
解决办法
195
查看次数

我应该如何在电报 python bot 中使用 parse_mode='HTML'?

我正在尝试使用 Telegram API 的send_photo()方法在带有机器人的频道中发送消息。它需要一个标题参数(类型String),但我无法通过parse_mode='HTML'参数格式化它...

如果我使用这样的东西:

send_photo(chat_id, photo, caption="<b>Some text</b>", parse_mode='HTML') 
Run Code Online (Sandbox Code Playgroud)

它发送消息但没有任何格式。有人知道为什么吗?谢谢

python bots telegram python-telegram-bot telegram-bot

7
推荐指数
1
解决办法
3万
查看次数