首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧启动不和谐机器人没有反应。

弹簧启动不和谐机器人没有反应。
EN

Stack Overflow用户
提问于 2022-04-19 03:41:06
回答 1查看 461关注 0票数 1

我使用带有discord4j依赖的spring创建了一个不和谐的机器人。机器人在不和谐的服务器上显示为在线,但不响应命令!todo,该命令应该打印一个待办事项列表。该项目编译时没有任何错误。

配置类:

代码语言:javascript
复制
package com.example.demo;
import discord4j.core.DiscordClientBuilder;
import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.Event;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
public class ConfigurationClass {



        @Value("${token}")
        private String token;
        @Bean
        public <T extends Event> GatewayDiscordClient gatewayDiscordClient(List<EventListener<T>> eventListeners) {
                GatewayDiscordClient client = DiscordClientBuilder.create(token)
                        .build()
                        .login()
                        .block();

                for (EventListener<T> listener : eventListeners) {
                        client.on(listener.getEventType())
                                .flatMap(listener::execute)
                                .onErrorResume(listener::handleError)
                                .subscribe();

                }

                return client;
        }


}

创建的消息类:

代码语言:javascript
复制
import com.austinv11.servicer.Service;
import discord4j.core.event.domain.message.MessageCreateEvent;
import reactor.core.publisher.Mono;

@Service
public class MessageCreateListener extends MessageListener implements EventListener<MessageCreateEvent> {

    @Override
    public Class<MessageCreateEvent> getEventType() {
        return MessageCreateEvent.class;
    }

    @Override
    public Mono<Void> execute(MessageCreateEvent event) {
        return processCommand(event.getMessage());
    }
} 

消息侦听器类:

代码语言:javascript
复制
package com.example.demo;

import discord4j.core.object.entity.Message;
import reactor.core.publisher.Mono;

public abstract class MessageListener {

    public Mono<Void> processCommand(Message eventMessage) {
        return Mono.just(eventMessage)
                .filter(message -> message.getAuthor().map(user -> !user.isBot()).orElse(false))
                .filter(message -> message.getContent().equalsIgnoreCase("!todo"))
                .flatMap(Message::getChannel)
                .flatMap(channel -> channel.createMessage("Things to do today:\n - write a bot\n - eat lunch\n - play a game"))
                .then();
    }
}

事件侦听器接口:

代码语言:javascript
复制
package com.example.demo;

import discord4j.core.event.domain.Event;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;



public interface EventListener<T extends Event> {

    Logger LOG = LoggerFactory.getLogger(EventListener.class);

    Class<T> getEventType();
    Mono<Void> execute(T event);

    default Mono<Void> handleError(Throwable error) {
        LOG.error("Unable to process " + getEventType().getSimpleName(), error);
        return Mono.empty();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-19 04:51:15

您使用的是com.austinv11.servicer.Service而不是org.springframework.stereotype.Service,因此类路径扫描不会捕获MessageCreateListener

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71919414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档