Code Monkey home page Code Monkey logo

Comments (6)

scrogson avatar scrogson commented on June 22, 2024

@wasnotrice can you show me your regexes for your hear and respond? You may just need to build them with a bit more care.

The way the responders work is completely async. Each incoming message is dispatched to all responders. If a message matches a responder it will be run.

from hedwig.

wasnotrice avatar wasnotrice commented on June 22, 2024

@scrogson here's an example set of hear/respond invocations with regexes:

  hear ~r/let (.*) know/, message do
    sendRandomKnowledge message
  end

  respond ~r/let (.*) know/, message do
    replyOrEmoteRandomly message
  end

As you see, the regexes are the same. I guess my confusion comes from the fact that I don't expect the hear responder to fire in the case where the regex matches, but the message is addressed to my bot. In that case, I only expect the respond responder to fire. Likewise, if the regex matches, but the message is not addressed to my bot, then I expect the hear responder to fire and not the respond responder.

I don't think I articulated the issue well initially. You're right, of course, the responders are async so it doesn't make sense to talk about "if no respond handler matches". The issue is really that (according to my mental model) hear responders should only match messages that are not addressed to the bot, and respond responders should only match messages that are addressed to the bot.

Am I thinking about it all wrong?

from hedwig.

scrogson avatar scrogson commented on June 22, 2024

@wasnotrice re-writing your hear responder to this should work:

hear ~r/^let (.*) know/i, msg do
  send_random_knowledge msg
end

That would ensure that it would only respond if the message begins with let.

In any case, I guess I would need to see where other use-cases might really require a different implementation than I currently have.

from hedwig.

krekbot avatar krekbot commented on June 22, 2024

@scrogson hmmmmm, I see how anchoring the regex would filter out direct messages, so that is a workaround. But it would also mean that I can't match a message like please let me know.

I could write a much more complicated regex that filtered out only messages starting with my bot's name/alias, but I'm looking for the framework to provide a macro for that, rather than having to code the regex for individual responders. If hear is specifically designed to have this behavior, maybe there is the possibility of adding a third macro like overhear, which would only fire for messages that are not addressed to the bot? I guess I could just write that here in my bot. Maybe that's a good place to start if it doesn't fit into Hedwig just yet.

FWIW, I am porting these responders from a Hubot bot, where they work as I expect (i.e. the hear responder does not fire on direct messages).

Thanks!

from hedwig.

scrogson avatar scrogson commented on June 22, 2024

@krekbot,

Gotcha. I will work on a solution. Thanks.

from hedwig.

wasnotrice avatar wasnotrice commented on June 22, 2024

@scrogson thanks! happy to pitch in and/or draft something if its helpful :)

from hedwig.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.