Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过电报获取给定机器人中所有聊天ID的列表?_Java_Telegram_Telegram Bot_Telegram Webhook - Fatal编程技术网

Java 如何通过电报获取给定机器人中所有聊天ID的列表?

Java 如何通过电报获取给定机器人中所有聊天ID的列表?,java,telegram,telegram-bot,telegram-webhook,Java,Telegram,Telegram Bot,Telegram Webhook,我正在使用CRON作业创建一个电报机器人,这样它会随着每一部有趣的电影/系列的发行而更新,我希望它每月发送一次更新 你可以在这里查看它 我在stackoverflow中还看到了其他主题。 但是,这种解决方案不适用于我的问题,或者至少我认为是这样,因为我不必从我的机器人将进入的每个聊天中获得更新,因为它将是一个时事通讯机器人 基本上,我有: public void发送消息(字符串消息){ SendMessageSender=新建SendMessage().setChatId(someId).set

我正在使用CRON作业创建一个电报机器人,这样它会随着每一部有趣的电影/系列的发行而更新,我希望它每月发送一次更新

你可以在这里查看它

我在stackoverflow中还看到了其他主题。 但是,这种解决方案不适用于我的问题,或者至少我认为是这样,因为我不必从我的机器人将进入的每个聊天中获得更新,因为它将是一个时事通讯机器人

基本上,我有:

public void发送消息(字符串消息){
SendMessageSender=新建SendMessage().setChatId(someId).setText(message);
试一试{
执行(messageSender);
}捕获(e){
e、 printStackTrace();
}
}
如果您已经知道要向其发送消息的聊天ID,则可以发送一条消息。但是,我希望有一个函数(或REST端点)返回我的bot所连接的chetid列表,这样我就可以进行如下操作:

List chatIds=someMagicRESTendpointOrFunction();
stream().forEach(message->sendMessage(message));

您无法通过电报API获取所有chatId。看

我认为最好的解决方案是将所有chatId存储在数据库或文件中。 当用户启动bot或执行某些操作时,您可以从方法
public void onUpdateReceived(更新更新)
update
变量中获取chatId:

long chatId = update.hasMessage() 
           ? update.getMessage().getChat().getId() 
           : update.getCallbackQuery().getMessage().getChat().getId();
基于文件的id存储示例:

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class FileUtil {

private static final String FILE_NAME = "chatIds.txt";

public static boolean writeChatId(long chatId) {
    try {
        Path path = Paths.get(FILE_NAME);

        List<Long> adminChatIds = getChatIds();
        if (adminChatIds.contains(chatId)) return true;

        Files.write(path, (String.valueOf(chatId) + System.lineSeparator()).getBytes(), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    } catch (IOException e) {
        return false;
    }
    return true;
}

public static List<Long> getChatIds() {
    try {
        Path path = Paths.get(FILE_NAME);
        List<Long> result = new ArrayList<>();

        for (String line : Files.readAllLines(path)) {
            result.add(Long.valueOf(line));
        }
        return result;
    } catch (Exception e) {
        return Collections.emptyList();
    }
}

}
import java.io.*;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.nio.file.StandardOpenOption;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
公共类FileUtil{
私有静态最终字符串文件\u NAME=“chatIds.txt”;
公共静态布尔writeChatId(长chatId){
试一试{
Path Path=Path.get(文件名);
List adminChatIds=getChatIds();
if(adminChatIds.contains(chatId))返回true;
write(路径,(String.valueOf(chatId)+System.lineSeparator()).getBytes(),StandardOpenOption.CREATE,StandardOpenOption.APPEND);
}捕获(IOE异常){
返回false;
}
返回true;
}
公共静态列表getChatIds(){
试一试{
Path Path=Path.get(文件名);
列表结果=新建ArrayList();
for(字符串行:Files.readAllLines(路径)){
结果.添加(行的长值);
}
返回结果;
}捕获(例外e){
返回集合。emptyList();
}
}
}