机器人有什么问题?

时间:2021-05-18 21:08:50

标签: java discord bots discord-jda vk

这个bot应该在VKONTAKTE社区墙上发布发送到discord频道的消息,请告诉我为什么他没有在墙上发布这些消息? 我按照 VKontakte 上的技术文档做了一切,但我无法弄清楚缺少发布的原因是什么 它与电报一起工作正常,它不想联系 VKONTACTE 包 domain_name.project;

import com.google.gson.Gson;
import domain_name.project.json.Config;
import domain_name.project.json.TelegramMessage;
import domain_name.project.json.TelegramPhotos;
import net.dv8tion.jda.api.EmbedBuilder;

import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Message;

import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.requests.GatewayIntent;
import net.dv8tion.jda.api.requests.restaction.MessageAction;

import okhttp3.*;
import org.jetbrains.annotations.NotNull;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.List;
import java.util.stream.Collectors;

public class Project {
    private static final Config config = new Gson().fromJson(new InputStreamReader(Project.class.getResourceAsStream("/config.json")), Config.class);
    private static final OkHttpClient client = new OkHttpClient();

    public static void main(String[] args) throws Exception {

        JDA builder = new JDABuilder()
                .setActivity(Activity.watching("за миром"))
                .setToken(config.discord.token)
                .build();

        JDA jda = JDABuilder.create(config.discord.token, GatewayIntent.GUILD_MESSAGES, GatewayIntent.GUILD_MEMBERS).build();

        jda.addEventListener(new ListenerAdapter() {
            @Override
            public void onMessageReceived(@NotNull MessageReceivedEvent event) {
                if (event.getAuthor().isBot()) return;

                if (event.getChannel().getId().equals(config.discord.posts_channel_id)) {
                    String post = event.getMessage().getContentStripped();
                    List<String> attachments = event.getMessage().getAttachments().stream().filter(Message.Attachment::isImage).map(Message.Attachment::getUrl).collect(Collectors.toList());

                    if (attachments.isEmpty()) {
                        event.getChannel().sendMessage(event.getMessage()).queue();
                    } else {
                        MessageAction message = event.getChannel().sendMessage(event.getMessage());

                        short i = 0;

                        try {
                            for (String url : attachments) {
                                BufferedImage img = ImageIO.read(new URL(url));

                                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                                ImageIO.write(img, "png", baos);

                                message = message.addFile(baos.toByteArray(), String.format("image%d.png", i));

                                i++;
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        message.complete();
                    }

                    try {
                        if (!post.isEmpty()) {
                            client.newCall(new Request.Builder().url(String.format("https://api.telegram.org/bot%s/sendMessage", Project.config.telegram.token)).post(RequestBody.create(MediaType.get("application/json"), new Gson().toJson(new TelegramMessage(Project.config.telegram.chat_id, post)))).build()).execute();

                            if (attachments.isEmpty()) {
                                client.newCall(new Request.Builder().url(new HttpUrl.Builder().scheme("https").host("api.vk.com").addPathSegment("method").addPathSegment("wall.post").addQueryParameter("v", "5.130").addQueryParameter("owner_id", Project.config.vk.id).addQueryParameter("from_group", Project.config.vk.from_group).addQueryParameter("message", post).addQueryParameter("access_token", Project.config.vk.token).build().url()).get().build()).execute();
                            } else {
                                client.newCall(new Request.Builder().url(String.format("https://api.telegram.org/bot%s/sendMediaGroup", Project.config.telegram.token)).post(RequestBody.create(MediaType.get("application/json"), new Gson().toJson(new TelegramPhotos(Project.config.telegram.chat_id, attachments.stream().map(TelegramPhotos.InputMediaPhoto::new).collect(Collectors.toList()))))).build()).execute();
                                client.newCall(new Request.Builder().url(new HttpUrl.Builder().scheme("https").host("api.vk.com").addPathSegment("method").addPathSegment("wall.post").addQueryParameter("v", "5.130").addQueryParameter("owner_id", Project.config.vk.id).addQueryParameter("from_group", Project.config.vk.from_group).addQueryParameter("message", post + "\n\n" + String.join("\n", attachments)).addQueryParameter("access_token", Project.config.vk.token).build().url()).get().build()).execute();
                            }
                        } else {
                            client.newCall(new Request.Builder().url(String.format("https://api.telegram.org/bot%s/sendMediaGroup", Project.config.telegram.token)).post(RequestBody.create(MediaType.get("application/json"), new Gson().toJson(new TelegramPhotos(Project.config.telegram.chat_id, attachments.stream().map(TelegramPhotos.InputMediaPhoto::new).collect(Collectors.toList()))))).build()).execute();
                            client.newCall(new Request.Builder().url(new HttpUrl.Builder().scheme("https").host("api.vk.com").addPathSegment("method").addPathSegment("wall.post").addQueryParameter("v", "5.130").addQueryParameter("owner_id", Project.config.vk.id).addQueryParameter("from_group", Project.config.vk.from_group).addQueryParameter("message", String.join("\n", attachments)).addQueryParameter("access_token", Project.config.vk.token).build().url()).get().build()).execute();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    event.getMessage().delete().queue();
                }
            }

        });

        jda.awaitReady();

        System.out.println("Ready");
    }
}

0 个答案:

没有答案