You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发支持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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:18:22