当前位置: 首页 > 知识库问答 >
问题:

仅每5秒触发一个(聊天触发的机器人)的问题

葛高澹
2023-03-14

我想让我的discord机器人每隔5秒发送一条消息,告诉我如果我最近在聊天中输入了什么,你已经说了。例如,如果我发送这些消息(如下)Hi(消息1,一秒钟过去了)Hi(消息2,两秒钟过去了)Hi(消息3,三秒钟过去了)Hi(消息4,5秒钟过去了)(机器人说):你说话了(记住,机器人只说了一次,不是四次)

但是,到目前为止,它处于空闲状态,不发送任何消息。我没有收到任何错误,并且bot本身运行并且在线。我想知道是否有人可以帮我编辑代码,这样,如果我说了什么,5秒钟后,机器人只会说一次“你说了”。在此代码之前,以前的问题包括机器人垃圾邮件“youhavespeak”,这就是为什么我希望它只说一次“youhavespeak”。

异步定义on_message(消息):如果message.author.id=='XXXXXXXXXXXXX':

    mins = 0 #mins standing for minutes#
    num = 0 #var for counting how many times bot has sent msg#
    if "" in message.content.lower(): #means if I say anything#
      if mins % 5 == 0: #if seconds past is divisible by 5 (meaning 5 seconds have past)
        num +=1
        if num == 1:
          msg = 'You have spoken!'
          await client.send_message(message.channel,msg)
          num -=1 #make num 0 again so bot does not repeatedly send msg#
          time.sleep(5)
          mins +=1
        if (mins % 5)>0:
          time.sleep(5)
          mins +=1 #do nothing if not divisible#

我希望机器人每5秒钟,如果我说了什么,说一次“你说了”。

共有1个答案

越英韶
2023-03-14

每当机器人看到消息时,获取该消息的时间戳,并将其与机器人上次响应的消息的时间戳进行比较。如果超过5秒,记录时间戳并发送消息:

from datetime import timedelta
from discord.ext.commands import Bot

bot = Bot(command_prefix="!")

last_time = None

@bot.event
async def on_message(message):
    global last_time
    if message.author == bot.user: # ignore our own messages
        return
    if message.author.id == ...:
        if last_time is None or message.created_at - last_time <= timedelta(seconds=5):
            last_time = message.created_at
            await message.channel.send("You have spoken")  # bot.send_message(message.channel, ...) on async

bot.run("TOKEN")
 类似资料:
  • 我是一名java开发人员,我想开发一个聊天机器人,并集成到网站、脸书页面和WhatsApp群组中……Java中有没有一个非常好的框架,可以让我开发这个聊天机器人,并在未来集成人工智能。或者我用python或者NodeJs更好。如果是,哪个框架更适合这个项目。谢了。

  • 问题内容: 我在集群环境中将Quartz Scheduler用作Spring bean。 我有一些用@NotConcurrent注释的作业,它们每个集群运行一次(即,仅在一个节点中,仅在一个线程中)。 现在,我需要在集群的每个节点上运行一项作业。我删除了@NotConcurrent批注,但是它仅在一台计算机上的每个线程上运行。它不会在其他节点上触发。 我应该用什么来注释作业? 示例:带注释的Job

  • 问题内容: 现在,我的代码看起来像这样: 根据我所看到的(以及该类的Javadocs),计时器将等待5000毫秒(5秒),触发action事件,等待5000毫秒,再次触发,依此类推。但是,我要获取的行为是计时器已启动,事件已触发,计时器等待5000毫秒,再次触发,然后等待再次触发。 除非我错过了任何事情,否则我不会找到一种创建不会在触发前等待的计时器的方法。有没有一种很好的,干净的方法可以模拟这一

  • 将我的bot从V11升级到V12。1.1我有一条信息Reaction添加为 是的,它不整洁,但它不会通过第2行

  • 导语:哈喽呀铁汁们!这不年末了嘛小编最近忙到完全都没时间看消息。闺蜜连发几天消息都没回下班回家就收到闺蜜严厉的斥责????????于是我灵机一动准备搞个会自动回复的聊天机器人再也不拍回不了消息被误会啦~说干就干????????第一部分:(1)好友聊天自动回复第一步,安装python环境。打开python官网https://www.python.org/downloads/,下载与你的电脑系统相匹配的python发行版本,推荐python3.5-python3.6,版本太高了可能有

  • 问题内容: 在oracle中,我可以指定列,这将引发触发器的触发: 现在,我想执行以下操作:当 只 更新 一 列时,我不希望触发触发器。这怎么可能? 我可以列出除那一列之外的所有列,该列不应引起触发器的触发。对于具有许多列的表而言,这非常麻烦。 另一种方法是使用像这样的UPDATING函数: 但是,如果我立即更改了COL1 和 COL3,则该语句的计算结果为false。那不是我想要的,因为我只想更