Slack Event API - User Mentions - events

I see that there is a way to subscribe only for app mentions.
But I'm looking for subscribing for those message only, in which 1 or more user is mentioned instead. (For users who have authorized my app, or maybe all users is fine too.) As a user I can mention others in multiple different types of conversations. Hence, today I'm subscribing to message.channels, message.groups, message.im and message.mpim
This leads to processing of a lot of messages!
For example, I need to process each and every message that gets posted in channels.

Related

Discord Logging Bot JDA

I am trying to obtain the users message that was deleted and post into a logging channel and frankly I am stumped on how to get users message, and Author of messages name. After these two I will make a simple embed posted to a new channel but I cant figure out how to obtain the information. I searched here and only found answers for js but was wondering if there is a JDA answer.
Discord makes it hard to retrieve messages because it may be against the TOS and can get (in worst cases) you or your bot banned/removed. Also, most bots with deleted message logging will not have this feature anymore due to a change in the API in April 2020. I also think the answers for JS libraries were made before the API change.
If you really wanted to have deleted message logging you can have your bot store every message along with message IDs and author usernames. To optimize it a bit you can have different log files for each channel. When onMessageDelete() is called, you can get the logs for the channel and look for the message content and author username corresponding to the given message ID. The reason you have to do this is because this event only gives two things useful things: the message IDs and the channel IDs. If we had getAuthor() or getMessage() deleted message logging would be a breeze because we could just get that data directly.
If you don't want to go through all this hassle, you can use 1lighty's MessageLoggerV2, but client modifications are against the Discord TOS and are generally frowned upon in most cases.

How do I notify users on Slack that aren't in the channel?

What we are trying to do
I am working on automation which posts messages to a Slack channel using Incoming Webhooks on a custom Slack App. The messages mentions people.
What works
We can send a message just fine, it has formatted content, and usernames are correctly resolved using the link-names flag.
What isn't working
The whole point of the notification is to inform a dynamic set of people about something they should care about. The set of people we tag varies hugely (think people who contributed to a pull request) and so not all possible recipients are in the channel these automated messages go to.
We assumed that given the usernames are being directly #-mentioned, they would be notified by Slack. However, two of the users we've tested with and #-mentioned confirm they never received a notification they had been tagged.
This is different to "human" behaviour, where if you #-mention someone in Slack, you get a little message reminding you that person isn't in this channel and offers to invite them or let them know.
As far as we can tell, sending the message programmatically is doing the equivalent of "Do nothing" in the picture above. I want to do either of the other two options, preferably "Let them know".
How can I notify people they've been mentioned? I've looked at all the API documentation and nothing discusses notifying users who aren't in the channel that they are mentioned.
This can't be an uncommon issue.... right?
Notes:
We aren't directly calling chat.postMessage, it's just the only documentation on link_names I could find to link to. We are using Incoming Webhooks, which has minimal documentation on the parameters - it seems to be the same as chat.postMessage.
We would prefer not to move off Incoming Webhooks, but we can do a custom integration with the API if we have to.
You need to invite the user to the channel first, using the Python client that's:
client.channels_invite(
channel=channel_id,
user=user_id
)

Slack App API - Can I subscribe to and monitor all #username mentions for the current user?

When someone mentions a specific username by their handle in Slack, the user typically gets notified about that mention by Slack. I would like to make a Slack app that subscribes to those notifications for the current user. Any time a user gets notified that they were directly mentioned, I'd like to be informed of that in my app, along with the contents of that message.
I've looked through the API docs for quite a while and I can't seem to find support for this functionality. Am I missing something? Can this be done?
There is no event in the Slack Event API that handles mentions of users (although if you create a slack bot you can handle mentions of the slack bot's user with the app_mention event).
You can still listen for the message event and manually look through the text for any #UserMentions and handle them there. Note that this will only work for channels that the Slackbot has been granted access to.

Slack logon trigger

I want to create something in Slack that sends a message (starting by calling someone with '#') to a channel when specific users login. I've checked ifttt and zapier. I also checked the slack api to create something myself, but I couldn't really find anything usefull.
Anyone has any ideas?
Slack does not track user login or logoff in a traditional sense. Instead, users are always always "logged in" and available to receive messages once they have joined a team / channel.
There also is the concept of "presence", which is related, but not the same thing. User presence can change multiple times during a few minutes, e.g. if the user is on a mobile. I am guessing you would not want to send the user your message that often.
Still you can poll the presence information of a user with the API users.getPresence , which could be used to implement a script that polls this information on a regular basis and send your message. You also want to filter out presence changes below a certain duration threshold.
Keep in mind though that the rate limit for API methods is 1 per second. So depending on how many users you have in your workspace there will be a significant delay between the user becoming "present" and your script being able to send the message.
There is a workaround for that to have a google sheet as a database for the users and you can trigger by day once and timestamp it.
So the best trigger is a private message or public and you can use filter when mentioning or signin or signout it depends on the trigger word then you pass the filter since zapier won't count your zaps if you used fiter as a second step.

How do I receive only the messages that are direct messages to my bot user?

I have successfully setup my slack bot app, have enabled events etc. I want to receive any direct messages that the members of my slack team send to my bot. For this, I have only enabled Bot Events and No Team Events like below
However, I do not get any event on my webhook on this setting.
If I enable message.im event under Team Events, then I start getting events. But then, I get every message that the user (who has installed the app) sends to any other user in the team.
How do I get only the messages that are sent to my bot user?
Update 1
Based on this SO question I created a private channel with the bot user. Even then, the messages in the private channel do not arrive in my webhook with the above event subscriptions.
Update 2
After reinstalling the app, it seems to be working fine. I have only used it for few minutes after the reinstall so far. I will keep posting here how it goes. It would still be interesting to know what went wrong where.
It is normal behavior that your script receives all messages (for every channel your bot is a member of), not only the messages sent directly to your bot. At this time you can not filter further in the event configuration. So you need to filter out any unwanted message in your script handling the event.
See also this answer.

Resources