gpt4 book ai didi

java - IRCLib Java 创建的 IRC Bot 问题

转载 作者:行者123 更新时间:2023-12-01 14:59:23 25 4
gpt4 key购买 nike

我正在使用 IRCLib for Java 创建 IRC 机器人。它使用Moepii作为库中提供的客户端。 Moepii 的问题是它没有内置的防洪功能,所以我需要自己实现这一点。目前,我的机器人在响应大量命令时触发了 Quakesnet 过量洪水并启动。

有人对我如何实现防洪有任何建议吗?我的一个想法是假设一个 1024 字节的缓冲区,一旦达到,就向服务器发送 Ping 消息并等待响应,然后再继续。我以前从未使用过 IRC,所以我希望得到一些指导。

当前实现

private class FloodMonitor implements Runnable {

private final int MAXBYTES = 512;
private int messageBuffer = 0;
private boolean suspend = false;
private boolean stop = false;

@Override
public void run() {

while (!stop) {
while (!suspend) {
MessageStructure message = out.peek();
if (message != null) {
messageBuffer += message.msg.getBytes().length;
if (messageBuffer < MAXBYTES) {
out.poll().sendMessage();
} else {
suspend();
message.bot.send("ping irc.quakenet.org");
}
}
}
}
}

public void resetBuffer() {
messageBuffer = 0;
suspend = false;
}

public void stop() {
stop = true;
}

public void suspend() {
suspend = true;
}
}

private class MessageStructure {

public String target;
public String msg;
public BotConnection bot;

MessageStructure(String target, String msg, BotConnection bot) {
this.target = target;
this.msg = msg;
this.bot = bot;
}

private void sendMessage() {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
bot.doPrivmsgApproved(target, msg);
}
});

}
}

最佳答案

private class FloodMonitor implements Runnable {

private final int MAXBYTES = 768;
private int messageBuffer = 0;
private boolean suspend = false;
private boolean stop = false;

@Override
public void run() {

while (!stop) {
while (!suspend) {
final MessageStructure message = out.peek();
if (message != null) {
messageBuffer += message.msg.getBytes().length;
if (messageBuffer < MAXBYTES) {
out.poll().sendMessage();
} else {
suspend();

SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
message.bot.send("ping irc.quakenet.org");
}
});

}
}
}
}
}

public void resetBuffer() {
messageBuffer = 0;
suspend = false;
}

public void stop() {
stop = true;
}

public void suspend() {
suspend = true;
}
}

关于java - IRCLib Java 创建的 IRC Bot 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com