【发布时间】:2017-01-27 17:32:51
【问题描述】:
我需要将图像 url 发送到不显示图像 url 和隐藏 url 的电报。我看到一个电报机器人,它做得很好,并发送带有图像的长消息我附上这个机器人结果图像,看看它。 现在如何在我的自定义机器人中做到这一点? MARKDOWN样式或任何方式可能隐藏网址?我想在我的文本中隐藏图片网址,但电报显示我的图片。请参阅我的示例附加图像。 谢谢
【问题讨论】:
标签: image telegram telegram-bot
我需要将图像 url 发送到不显示图像 url 和隐藏 url 的电报。我看到一个电报机器人,它做得很好,并发送带有图像的长消息我附上这个机器人结果图像,看看它。 现在如何在我的自定义机器人中做到这一点? MARKDOWN样式或任何方式可能隐藏网址?我想在我的文本中隐藏图片网址,但电报显示我的图片。请参阅我的示例附加图像。 谢谢
【问题讨论】:
标签: image telegram telegram-bot
他们中的大多数使用点(或类似这个字符的一些东西)来描述链接,而你认为没有链接。
您可以键入以下行并选择custom markdown:
@bold [.](http://www.planwallpaper.com/static/images/i-should-buy-a-boat.jpg)
如果您想在链接中添加文本,您需要创建一个机器人并在机器人中使用此方法。
编辑:
要使用 bot api 发送超链接,您可以简单地发送 html 标记并使用 parse_mode。见telegram documents:
要使用此模式,请在使用 sendMessage 时在 parse_mode 字段中传递 HTML。目前支持以下标签:
<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<a href="http://www.example.com/">inline URL</a>
<a href="tg://user?id=123456789">inline mention of a user</a>
<code>inline fixed-width code</code>
<pre>pre-formatted fixed-width code block</pre>
样本:
<a href="http://www.planwallpaper.com/static/images/i-should-buy-a-boat.jpg"></a>
【讨论】:
根据Telegram API,看来如果你将disable_web_page_preview设置为true,你应该得到你想要的结果。
最后的消息应该是这样的:
{
chat_id: 1235,
message: "http://your/url",
disable_web_page_preview: true,
}
编辑: 看来我误解了这个问题,您实际上希望图像本身而不是 url 本身出现。
同样,根据Telegram API,您可以直接发送图像。但据我所知,您不能使用 URL 来执行此操作。您必须直接从电报服务器上传照片。您可以使用caption 属性来发送文本。
这是一个示例,说明您如何在 python 中执行此操作。您需要将其调整为您使用的任何语言,但概念是相同的。
import requests
response = requests.post(
"https://your.bot.url.com/sendPhoto",
data={
"chat_id": 1234,
"caption": "Your extra text here"
}
files={
"photo": (
"image_name.jpg",
"contents of image",
"image/jpg",
{},
)
}
)
caption 属性限制为 200 个字符,因此如果您想发送更多字符,则必须发送两条消息。
You can always ask Telegram to add this type of functionality in the future
【讨论】:
答案是零宽度非连接符 (ZWNJ) 字符。 ZWNJ 在 Unicode 中编码为U+200C ZERO WIDTH NON-JOINER(HTML &#8204;,&zwnj;)。
HTML 模式:
<a href="https://example.com">‌</a>
MARKDOWN模式:
[](https://example.com)
2021 年更新:
答案仍然有效,但电报不再允许您发送仅包含此字符的空短信,因此您必须在整条短信中添加至少一个字符。此外,您还可以使用字符 Unicode Character 'WORD JOINER' (U+2060) 代替。
【讨论】:
您可以使用&#160; 字符作为隐藏字符。
【讨论】:
&nbsp一样),但是确实有效
import requests
def telegram(channel,bot,text,img):
if(text==""):text="Refer - "
r = requests.get('https://api.telegram.org/bot'+bot+'/sendMessage?chat_id=@'+channel+'&parse_mode=markdown&text='+"[]("+img+")"+text)
使用上述功能。它将完美地工作。如果没有文本只有图像,它应该会中断。所以它会显示一个“。” (点)在这些情况下。
现在使用函数 -
telegram(your_channel_name,your_token_here,description,image_url)
【讨论】:
要正确发送网站上托管的图片而不显示任何参考链接,您必须使用“html”解析模式。
并且在要发送的内容中,例如,类似这样的内容(Python 模式):
# We take the html address of the image.
image_address = 'https://picsum.photos/100.jpg'
# The unicode character to prevent the words from
# being separated, in this case, we take advantage
# of it so that the Telegram API accepts it and
# incidentally so that it does not take up space
# when including text in the message.
word_joiner = '⁠'
# This would be the final pattern.
html_pattern = f'<a href="{image_address}">{word_joiner}</a>'
【讨论】:
使用HTML 解析模式。在开始标签和结束标签之间保留空白。
<a href="https://t.me/"> </a>
【讨论】: