'Slack-Bolt Python API not picking up messages correctly?

I am trying to use the Slack-bolt API for python to listen to DMs to the slack bot that contain specific text. Here is my file that initiates the Slack-Bolt listener


import os
from server import *
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
# Initializes your app with your bot token and socket mode handler
app = App(token=MY_TOKEN)

# Listens to incoming messages that contain "list"
@app.message("list") 
def message_hello(message, say):
    # say() sends a message to the channel where the event was triggered
    res = requests.get(url + '/api/users/list')
    say("The list of users is: ", res.json())

# Start your app
if __name__ == "__main__":
    SocketModeHandler(app, "TOKEN").start()

When I send messages to my bot I am getting "127.0.0.1 - - [20/Mar/2022 00:23:47] "POST /api HTTP/1.1" 200 -" but the listener is not executing the code it contains. I cannot get it to say hello back inside of Slack in any way.

Thanks



Solution 1:[1]

Instead of setting the app to listen for every word posted, I would suggest using the "app_mention" event which triggers only when the message sent begins with @your_bot_name followed by your message. This way you will avoid getting random responses from your bot when sending messages which contain specific keywords.

@app.event("app_mention")
def test(ack,event,logger):
    ack()
    name = event["user"] # gets the name of the user who triggered the event
    channel =event["channel"] # gets the channel in which the event was triggered
    text = event["text"].lower() # gets the lowercase text of your sent message 
    ts = event["ts"] # gets the timestamp of the message (this is used for replying in threads)
    
    if any(x in text for x in ("users list","list of users")): # if you need specific combinations of keywords i would recommend using this method)
    # if text == "list" :                                       
            try:
                app.client.chat_postMessage(channel = channel, thread_ts=ts, text = f"*Hi <@{name}>, Here is a random response*")
            except:
                print(logger.info)

In the end you could trigger a response from your bot app by posting a message like so:

@your_bot_name show me the users list

or

@your_bot_name show me the list of users

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Adi Petrescu