我正在研究一个拥有该命令的IRC机器人!Scouter它将生成一个随机数....我已经完成了,我想做的是一个冷却系统,以防止人们发送垃圾邮件再一次。
这是我的代码。
public class Twitchbot extends PircBot {
Random dice = new Random();
int number;
for(int counter=1; counter<=1;counter++) {
number = 1+dice.nextInt(9001);
System.out.println(number + " ");
}
public Twitchbot() {
this.setName("Blah");
}
public void onMessage(String channel, String sender, String login, String hostname, String message) {
if (message.equalsIgnoreCase("!Scouter")) {
sendMessage(channel,": The time is now " + sender + number);
for(int counter=1; counter<=1;counter++) {
number = 1+dice.nextInt(9001);
System.out.println(number + " ");
try {
Thread.sleep(5000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}
}
我尝试使用此代码进行冷却
try {
Thread.sleep(5000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
但它所做的只是在睡了5秒后做代码。我不想要这个命令!Scouter在那个冷静期间注册。有更好的方法吗?
答案 0 :(得分:0)
问题是onMessage
是异步调用的,所以你不能阻止它被睡眠调用。
最简单的解决方法是将当前时间存储为实例变量,如果存储时间与当前时间之间的差异小于5秒,则立即返回onMessage
。
答案 1 :(得分:0)
您可以使用以下方式在成功通话时保存当前系统时间:
lastCall = System.currentTimeMillis();
之前,你检查
if(System.currentTimeMillis() - lastCall >= DELAY)
其中DELAY是以毫秒为单位的时间(1秒等于1000毫秒)。
如果该语句为真,则将lastCall设置为当前时间:
lastCall = System.currentTimeMillis();
并调用正常代码。
它看起来像这样:
long lastCall = 0L; //Initializing
public void onMessage(String channel, String sender,
String login, String hostname, String message) {
if (message.equalsIgnoreCase("!Scouter")) {
if(System.currentTimeMillis() - lastCall >= 5000)
{
lastCall = System.currentTimeMillis(); // Set lastCall again
sendMessage(channel,": The time is now " + sender + number);
for(int counter=1; counter<=1;counter++) {
number = 1+dice.nextInt(9001);
System.out.println(number + " ");
}
}
}
}
答案 2 :(得分:0)
我并不完全了解您系统的功能,但我发现您的系统每次进入睡眠状态时都会卡住。
如果你想摆脱这种行为,一个好的方法是使用一个Thread作为匿名类调用,并在后台做事。
我会这样做:
if (message.equalsIgnoreCase("!Scouter")) {
sendMessage(channel,": The time is now " + sender + number);
new Thread() {
@Override
public void run() {
for(int counter=1; counter<=1;counter++) {
number = 1+dice.nextInt(9001);
System.out.println(number + " ");
try {
sleep(5000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}.run();
}
希望它有所帮助。