所以我在过去的两天里一直在一个非常简单的网站上工作,但我认为以某种方式将网站与Discord机器人联系起来会很简洁。对于Discord bot部分,我一直在使用JDA库。
我遇到的问题是我似乎无法使用save
方法。但是,findById
和findAll
似乎完全正常。我可以在下面找到我的代码设置方式。
@Controller
public class IndexController extends ListenerAdapter {
private static boolean botStarted = false;
@Autowired
private NewsPostRepository newsPostRepository;
@GetMapping("/")
public String getIndex(ModelMap map) {
// TODO: add news post images.
NewsPost savedNewsPost = newsPostRepository.save(new NewsPost("Controller", "Posted through controller",
new byte[]{}, new Date(), true));
System.out.println(savedNewsPost);
return "index";
}
@GetMapping("/start")
public String startBot() {
if (!botStarted) {
try {
JDA jda = new JDABuilder(AccountType.BOT)
.setToken("my-token")
.addEventListener(this)
.buildBlocking(); // Blocking vs async
} catch (LoginException e) {
e.printStackTrace();
} catch (RateLimitedException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
botStarted = true;
}
}
return "redirect:/";
}
@Override
public void onMessageReceived(MessageReceivedEvent messageReceivedEvent) {
User author = messageReceivedEvent.getAuthor();
MessageChannel channel = messageReceivedEvent.getChannel();
Message message = messageReceivedEvent.getMessage();
if (!author.isBot()) {
if (message.getContent().startsWith("!news")) {
NewsPost savedNewsPost = newsPostRepository.save(new NewsPost("Discord", "Posted through Discord",
new byte[]{}, new Date(), true));
System.out.println(savedNewsPost);
}
}
}
}
存储库:
public interface NewsPostRepository extends CrudRepository<NewsPost, String> {
}
奇怪的是,当我进入索引页面时,NewsPost
保存得非常好,并且在数据库中可见。
当我尝试使用Discord bot添加NewsPost
时,它会以与索引方法相同的方式返回一个对象,其ID不为空且应该可用于查找然而,在数据库中,这个条目无处可寻。也没有例外。请注意,这两个save()
调用都是相同的。
我尝试使用服务并添加@Transactional
,但到目前为止还没有任何效果。