Ich versuche, die Slack-bolt-API für Python zu verwenden, um DMs an den Slack-Bot zu senden, die bestimmten Text enthalten. Hier ist meine Datei, die den Slack-Bolt-Listener initiiert
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()
Wenn ich Nachrichten an meinen Bot sende, erhalte ich "127.0.0.1 - - [20/Mar/2022 00:23:47] "POST /api HTTP/1.1" 200 -", aber der Listener führt den darin enthaltenen Code nicht aus. Ich kann es nicht dazu bringen, in Slack in irgendeiner Weise Hallo zu sagen.
Vielen Dank
Lösung des Problems
Anstatt die App so einzustellen, dass sie auf jedes gepostete Wort lauscht, würde ich vorschlagen, das Ereignis „app_mention" zu verwenden, das nur ausgelöst wird, wenn die gesendete Nachricht mit
@your_bot_name gefolgt von Ihrer Nachricht beginnt. Auf diese Weise vermeiden Sie, zufällige Antworten von Ihrem Bot zu erhalten, wenn Sie Nachrichten senden, die bestimmte Schlüsselwörter enthalten.
@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)
Am Ende könnten Sie eine Antwort von Ihrer Bot-App auslösen, indem Sie eine Nachricht wie diese posten:
@your_bot_name zeigt mir die Benutzerliste
oder
@your_bot_name zeigt mir die Liste der Benutzer
Keine Kommentare:
Kommentar veröffentlichen