【发布时间】:2015-12-06 05:39:10
【问题描述】:
我正在使用 Pircbot 创建一个 IRC 机器人,它可以响应某些请求(例如,“!time”提供本地时间)。我正在构建的功能之一是一个赠品系统,它从当前在线用户中随机选择一个用户并给他们一个奖品。
我想通过强制中奖者在中奖后 30 分钟内输入“!accept”以领取奖品来增强系统。但是我希望机器人仍然可以运行,这意味着我不能在等待消息的 30 分钟内冻结整个线程。
我正在考虑的几种方法对我来说有点太老套了。
我可以将获胜者的姓名存储在变量或 .properties 文件中,并不断留意“!accept”命令。如果获胜者(变量中的名称)发送了“!accept”,并且消息发送时间在 30 分钟内,则确认获胜者。这样做的缺点是,如果机器人在这 30 分钟内重新启动或暂时脱机,可能会导致很多连续性问题,尤其是 .properties 文件。
创建一个可运行的线程,休眠 30 分钟,然后检查 !accept 命令的所有新消息。上面加了hacky酱,这听起来很老套。
摆脱我的烦恼。
【问题讨论】:
-
标记您选择获胜者的时间,甚至可能还有另一个
Thread或Timer事件在 30 分钟后触发以重置它。如果输入是“!接受”并且来自正确的用户,并且“标记”时间和现在之间的差异小于 30 分钟,那么快乐的用户 -
要么你30分钟后回来检查用户是否写了
!accept,要么你有一个定时器线程及时检查这个情况并在30分钟后停止。这两个选项都有效,取决于您希望多快检测到潜在获胜者写了!accept -
@MadProgrammer 不错的主意...您建议我在 30 分钟内将获胜者的姓名存储在哪里? .properties 文件还是讨厌的全局变量?
-
这取决于你。您可以使用数据库、单例管理器或其他一些“状态”对象
-
谢谢@MadProgrammer,它最终运行良好。如果您提供解决方案,我可以将您设置为答案。