如何开发支持URL存储与查询的Telegram机器人(Java/Python)
Python 实现方案
依赖安装:
pip install python-telegram-bot==13.7
代码示例:
from telegram import Update from telegram.ext import Updater, CommandHandler, CallbackContext # 用字典存储用户的URL,key是用户ID,value是URL列表 user_urls = {} def start(update: Update, context: CallbackContext) -> None: update.message.reply_text('使用 /put <URL> 保存链接,/get 查询已保存的链接') def put_url(update: Update, context: CallbackContext) -> None: user_id = update.effective_user.id # 检查是否提供了URL参数 if not context.args: update.message.reply_text('请在 /put 后跟上要保存的URL,比如:/put https://example.com') return url = ' '.join(context.args) # 初始化用户的URL列表(如果不存在) if user_id not in user_urls: user_urls[user_id] = [] user_urls[user_id].append(url) update.message.reply_text(f'URL已保存:{url}') def get_urls(update: Update, context: CallbackContext) -> None: user_id = update.effective_user.id if user_id not in user_urls or not user_urls[user_id]: update.message.reply_text('你还没有保存任何URL') return # 拼接URL列表返回 urls_list = '\n'.join([f'{i+1}. {url}' for i, url in enumerate(user_urls[user_id])]) update.message.reply_text(f'你已保存的URL:\n{urls_list}') def main() -> None: # 替换成你的机器人Token,从@BotFather获取 updater = Updater("YOUR_BOT_TOKEN") dp = updater.dispatcher # 注册命令处理器 dp.add_handler(CommandHandler("start", start)) dp.add_handler(CommandHandler("put", put_url)) dp.add_handler(CommandHandler("get", get_urls)) # 启动机器人 updater.start_polling() updater.idle() if __name__ == '__main__': main()
说明:
user_urls是内存存储,重启机器人后数据会丢失,如需持久化可写入JSON文件或SQLite数据库- 替换
YOUR_BOT_TOKEN为@BotFather提供的机器人令牌 /put命令支持带空格的URL(如含参数的链接),通过' '.join(context.args)拼接参数
Java 实现方案
Maven依赖配置:
<dependency> <groupId>org.telegram</groupId> <artifactId>telegrambots</artifactId> <version>6.7.0</version> </dependency>
代码示例:
import org.telegram.telegrambots.bots.TelegramLongPollingBot; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.objects.Update; import org.telegram.telegrambots.meta.exceptions.TelegramApiException; import java.util.HashMap; import java.util.List; import java.util.ArrayList; import java.util.Map; public class URLBot extends TelegramLongPollingBot { // 存储用户URL,key是用户ID,value是URL列表 private final Map<Long, List<String>> userUrls = new HashMap<>(); @Override public String getBotUsername() { // 替换成你的机器人用户名 return "YourBotUsername"; } @Override public String getBotToken() { // 替换成你的机器人Token return "YOUR_BOT_TOKEN"; } @Override public void onUpdateReceived(Update update) { if (update.hasMessage() && update.getMessage().hasText()) { String messageText = update.getMessage().getText(); Long userId = update.getMessage().getFrom().getId(); Long chatId = update.getMessage().getChatId(); if (messageText.startsWith("/start")) { sendMessage(chatId, "使用 /put <URL> 保存链接,/get 查询已保存的链接"); } else if (messageText.startsWith("/put")) { // 提取URL部分,保留含空格的内容 String[] parts = messageText.split(" ", 2); if (parts.length < 2) { sendMessage(chatId, "请在 /put 后跟上要保存的URL,比如:/put https://example.com"); return; } String url = parts[1]; // 初始化用户的URL列表 userUrls.computeIfAbsent(userId, k -> new ArrayList<>()).add(url); sendMessage(chatId, "URL已保存:" + url); } else if (messageText.equals("/get")) { List<String> urls = userUrls.get(userId); if (urls == null || urls.isEmpty()) { sendMessage(chatId, "你还没有保存任何URL"); return; } // 拼接URL列表 StringBuilder sb = new StringBuilder("你已保存的URL:\n"); for (int i = 0; i < urls.size(); i++) { sb.append(i+1).append(". ").append(urls.get(i)).append("\n"); } sendMessage(chatId, sb.toString().trim()); } } } private void sendMessage(Long chatId, String text) { SendMessage message = new SendMessage(); message.setChatId(chatId.toString()); message.setText(text); try { execute(message); } catch (TelegramApiException e) { e.printStackTrace(); } } public static void main(String[] args) { org.telegram.telegrambots.meta.TelegramBotsApi botsApi; try { botsApi = new org.telegram.telegrambots.meta.TelegramBotsApi(org.telegram.telegrambots.updatesreceivers.DefaultBotSession.class); botsApi.registerBot(new URLBot()); } catch (org.telegram.telegrambots.meta.exceptions.TelegramApiException e) { e.printStackTrace(); } } }
说明:
userUrls为内存存储,重启后数据丢失,持久化可通过文件或数据库实现- 替换
getBotUsername()和getBotToken()中的内容为你的机器人信息 /put命令通过split(" ", 2)确保含空格的URL能被正确提取
内容的提问来源于stack exchange,提问作者Nicolò Frongia
相关产品推荐
相关产品推荐

