Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stevenharman/lita-slack-karma-sync
Lita + Slack + Karma? You need to Sync!
https://github.com/stevenharman/lita-slack-karma-sync
Last synced: 11 days ago
JSON representation
Lita + Slack + Karma? You need to Sync!
- Host: GitHub
- URL: https://github.com/stevenharman/lita-slack-karma-sync
- Owner: stevenharman
- License: mit
- Created: 2015-03-14T17:35:01.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2015-05-06T02:21:01.000Z (over 9 years ago)
- Last Synced: 2024-04-26T15:46:41.181Z (9 months ago)
- Language: Ruby
- Homepage:
- Size: 1.23 MB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Lita + Slack + Karma? You need to Sync!
Are you a Slack user? And does your team also use `lita-karma`? This plugin can
be used to keep your karma terms synced up with your Slack name.![lizlemon++](doc/liz-lemon-self-high-five.gif)
### What's that now?
When using Slack and `lita-karma` you can give another user, or any term in the world, some karma like so:
```
> lizlemon++
> Litabot: lizlemon: 40
> computers--
> Litabot: computers: -10
> ruby~~
> Litabot: ruby: 12 (15), linked to: rubby: 3
```And that works great for general terms, but there can be many ways to address a
user. "Liz Lemon" from the above example could be addressed in any of the
following ways:* her mention name: `> lizlemon++`
* her mention name preceded with "`@`": `> @lizlemon++`
* her Slack UUID: `> U03BX9ZA9++`
* her Slack UUID preceded with "`@`": `> @U03BX9ZA9++`
* her full name with a "`:`" delimiters: `> :Liz Lemon:++`
* And each of the above could different based on capitalization!The problem is these all become unique "Karma Terms" and Liz Lemon's karma has
been spread over a number of terms. To combat this, you can use `lita-karma`'s
`term_normalizer` to normalize to a single, consistent "term" for users. The
Slack UUID is a great choice for that. The wrinkle then is that you're left
with this:```
> lizlemon++
> Litabot: U03BX9ZA9: 41
> Litabot karma
> Litabot:
U09BZ9AF7: 45
U08FA0EX1: 43
tacos: 42
U03BX9ZA9: 41
```Who are those users? That's where this plugin can help! :thumbsup:
## Installation
Add `lita-slack-karma-sync` to your Lita instance's Gemfile:
``` ruby
gem "lita-slack-karma-sync"
```## Configuration
In your `lita_config.rb`:
1. Create a `proc` that will normalize a given UUID and name to a consistent
string. Something like this:```ruby
normalized_karma_user_term = ->(user_id, user_name) {
"@#{user_id} (#{user_name})" #=> @UUID (Liz Lemon)
}
```1. Configure `lita-karma`'s `term_normalizer` to try to find a user for the
"term", and then normalize them via the proc defined above.```ruby
config.handlers.karma.term_normalizer = lambda do |full_term|
term = full_term.to_s.strip.sub(/[<:]([^>:]+)[>:]/, '\1')
user = Lita::User.fuzzy_find(term.sub(/\A@/, ''))if user
normalized_karma_user_term.call(user.id, user.name)
else
term.downcase
end
end
```1. Tell `lita-slack-karma-sync` to use the same proc to normalize user terms:
```ruby
config.handlers.slack_karma_sync.user_term_normalizer = normalized_karma_user_term
```## Usage
Give folks karma!
```
> lizlemon++
> Litabot: @U03BX9ZA9 (Liz Lemon): 43
> @lizlemon++
> Litabot: @U03BX9ZA9 (Liz Lemon): 44
> liz++
> Litabot: @U03BX9ZA9 (Liz Lemon): 45
> :Liz Lemon:++
> Litabot: @U03BX9ZA9 (Liz Lemon): 46
> Litabot karma
> Litabot:
@U03BX9ZA9 (Liz Lemon): 46
@U09BZ9AF7 (Tracy Jordan): 45
tacos: 42
@U08FA0EX1 (Jack Donaghy): 41
```## License
See the [LICENSE](LICENSE) file.