Repository files navigation

chainbot.js

chainbot is a slackbot who watches over the ChainCoin slack channel while we sleep. For now, it can turn certain Slack channels into read only channels by deleting all messages that are posted to that channel. In the future, we will add support for vote banning, moderator banning, and also allow the bot to answer questions. This bot is based off of the excellent brianwilliams.js bot by Tyler Shambora - thank you for your code!!

Getting Started

Installing

  1. Create a new Heroku app
  2. Create Slack app
  3. Get Slack bot token, as well as Slack admin/god token
  4. Clone this repo
  5. Push the code up to your Heroku app
  6. Add the following config vars to your heroku app
BOT_TOKEN
PORT
CLIENT_ID
CLIENT_SECRET
MEGA_TOKEN
READ_ONLY_CHANNELS
LISTEN_CHANNELS
ANNOUNCER_USERS
MODERATOR_USERS
UPDATE_USERS
HAPPY_REACTIONS
ANGRY_REACTIONS

where:

  • BOT_TOKEN is the bot's token from your Slack app
  • PORT is the port the bot api will bind to (set this to 80 for default behaviour)
  • CLIENT_ID is the client id from your Slack app
  • CLIENT_SECRET is the client secret from your Slack app
  • MEGA_TOKEN is the admin/god token of an admin user in Slack
  • READ_ONLY_CHANNELS are the channel ids of channels you want the bot to keep as read-only (separated by commas)
  • LISTEN_CHANNELS are the channel ids of channels you want the bot to listen to (separated by commas)
  • ANNOUNCER_USERS is a list of user ids that can post through the bot to the read only channels (separated by commas)
  • MODERATOR_USERS is a list of user ids that are allowed to use the moderation features (separated by commas)
  • UPDATE_USERS is a list of user ids that are allowed to use the update features (separated by commas)
  • HAPPY_REACTIONS is a list of emojis the bot will use when reacting in a happy manner (separated by commas)
  • ANGRY_REACTIONS is a list of emojis the bot will use when reacting in an angry manner (separated by commas)

To get the ids of the channels and users you can use the slack api with your token and a tool such as https://www.hurl.it/

Once you've finished all the prior steps and deployed your bot to your Heroku server, visit https://[YOUR HEROKU APP URL].com/login to authenticate your bot. Once you've completed the authentication process, the bot should be a part of your team. Add people to the appropriate whitelists and also channels that you'd like to make read only.

Alternatively, you can use a local node.js server to host the bot. One way of doing this is to use the dotenv module (https://github.com/motdotla/dotenv) to prepare the environment with the needed variables above. An example template.env has been included for this purpose.

Example Message

While the channels are read-only and all messages are immediately deleted, the bot is allowed to post to the channel and he won't delete his own posts. This is useful if you want to make a designated announcements channel that the bot can post to but everyone else's messages are deleted as to not distract from the announcements the bot posts. In order to post to a read-only channel via. the bot, send him a message with this format:

post to [channel name]
[post title]
___
[post message]

for example:

post to development-
Warning of the Day
___
No matter what, do not create angry monkeys. Stay turned for more details.

You can use message formatting in the post message, and if you want create a post with two separate title/message combos, separate them with three line breaks like so:

post to news
Message Title One
___
Message Body One
Message Title Two
___
Message Body Two

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Read-only slack channels. Announcements, Ban hammer and more.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

chainbot.js

chainbot is a slackbot who watches over the ChainCoin slack channel while we sleep. For now, it can turn certain Slack channels into read only channels by deleting all messages that are posted to that channel. In the future, we will add support for vote banning, moderator banning, and also allow the bot to answer questions. This bot is based off of the excellent brianwilliams.js bot by Tyler Shambora - thank you for your code!!

Getting Started

Installing

  1. Create a new Heroku app
  2. Create Slack app
  3. Get Slack bot token, as well as Slack admin/god token
  4. Clone this repo
  5. Push the code up to your Heroku app
  6. Add the following config vars to your heroku app
BOT_TOKEN
PORT
CLIENT_ID
CLIENT_SECRET
MEGA_TOKEN
READ_ONLY_CHANNELS
LISTEN_CHANNELS
ANNOUNCER_USERS
MODERATOR_USERS
UPDATE_USERS
HAPPY_REACTIONS
ANGRY_REACTIONS

where:

  • BOT_TOKEN is the bot's token from your Slack app
  • PORT is the port the bot api will bind to (set this to 80 for default behaviour)
  • CLIENT_ID is the client id from your Slack app
  • CLIENT_SECRET is the client secret from your Slack app
  • MEGA_TOKEN is the admin/god token of an admin user in Slack
  • READ_ONLY_CHANNELS are the channel ids of channels you want the bot to keep as read-only (separated by commas)
  • LISTEN_CHANNELS are the channel ids of channels you want the bot to listen to (separated by commas)
  • ANNOUNCER_USERS is a list of user ids that can post through the bot to the read only channels (separated by commas)
  • MODERATOR_USERS is a list of user ids that are allowed to use the moderation features (separated by commas)
  • UPDATE_USERS is a list of user ids that are allowed to use the update features (separated by commas)
  • HAPPY_REACTIONS is a list of emojis the bot will use when reacting in a happy manner (separated by commas)
  • ANGRY_REACTIONS is a list of emojis the bot will use when reacting in an angry manner (separated by commas)

To get the ids of the channels and users you can use the slack api with your token and a tool such as https://www.hurl.it/

Once you've finished all the prior steps and deployed your bot to your Heroku server, visit https://[YOUR HEROKU APP URL].com/login to authenticate your bot. Once you've completed the authentication process, the bot should be a part of your team. Add people to the appropriate whitelists and also channels that you'd like to make read only.

Alternatively, you can use a local node.js server to host the bot. One way of doing this is to use the dotenv module (https://github.com/motdotla/dotenv) to prepare the environment with the needed variables above. An example template.env has been included for this purpose.

Example Message

While the channels are read-only and all messages are immediately deleted, the bot is allowed to post to the channel and he won't delete his own posts. This is useful if you want to make a designated announcements channel that the bot can post to but everyone else's messages are deleted as to not distract from the announcements the bot posts. In order to post to a read-only channel via. the bot, send him a message with this format:

post to [channel name]
[post title]
___
[post message]

for example:

post to development-
Warning of the Day
___
No matter what, do not create angry monkeys. Stay turned for more details.

You can use message formatting in the post message, and if you want create a post with two separate title/message combos, separate them with three line breaks like so:

post to news
Message Title One
___
Message Body One
Message Title Two
___
Message Body Two

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Read-only slack channels. Announcements, Ban hammer and more.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

chainbot.js

chainbot is a slackbot who watches over the ChainCoin slack channel while we sleep. For now, it can turn certain Slack channels into read only channels by deleting all messages that are posted to that channel. In the future, we will add support for vote banning, moderator banning, and also allow the bot to answer questions. This bot is based off of the excellent brianwilliams.js bot by Tyler Shambora - thank you for your code!!

Getting Started

Installing

  1. Create a new Heroku app
  2. Create Slack app
  3. Get Slack bot token, as well as Slack admin/god token
  4. Clone this repo
  5. Push the code up to your Heroku app
  6. Add the following config vars to your heroku app
BOT_TOKEN
PORT
CLIENT_ID
CLIENT_SECRET
MEGA_TOKEN
READ_ONLY_CHANNELS
LISTEN_CHANNELS
ANNOUNCER_USERS
MODERATOR_USERS
UPDATE_USERS
HAPPY_REACTIONS
ANGRY_REACTIONS

where:

  • BOT_TOKEN is the bot's token from your Slack app
  • PORT is the port the bot api will bind to (set this to 80 for default behaviour)
  • CLIENT_ID is the client id from your Slack app
  • CLIENT_SECRET is the client secret from your Slack app
  • MEGA_TOKEN is the admin/god token of an admin user in Slack
  • READ_ONLY_CHANNELS are the channel ids of channels you want the bot to keep as read-only (separated by commas)
  • LISTEN_CHANNELS are the channel ids of channels you want the bot to listen to (separated by commas)
  • ANNOUNCER_USERS is a list of user ids that can post through the bot to the read only channels (separated by commas)
  • MODERATOR_USERS is a list of user ids that are allowed to use the moderation features (separated by commas)
  • UPDATE_USERS is a list of user ids that are allowed to use the update features (separated by commas)
  • HAPPY_REACTIONS is a list of emojis the bot will use when reacting in a happy manner (separated by commas)
  • ANGRY_REACTIONS is a list of emojis the bot will use when reacting in an angry manner (separated by commas)

To get the ids of the channels and users you can use the slack api with your token and a tool such as https://www.hurl.it/

Once you've finished all the prior steps and deployed your bot to your Heroku server, visit https://[YOUR HEROKU APP URL].com/login to authenticate your bot. Once you've completed the authentication process, the bot should be a part of your team. Add people to the appropriate whitelists and also channels that you'd like to make read only.

Alternatively, you can use a local node.js server to host the bot. One way of doing this is to use the dotenv module (https://github.com/motdotla/dotenv) to prepare the environment with the needed variables above. An example template.env has been included for this purpose.

Example Message

While the channels are read-only and all messages are immediately deleted, the bot is allowed to post to the channel and he won't delete his own posts. This is useful if you want to make a designated announcements channel that the bot can post to but everyone else's messages are deleted as to not distract from the announcements the bot posts. In order to post to a read-only channel via. the bot, send him a message with this format:

post to [channel name]
[post title]
___
[post message]

for example:

post to development-
Warning of the Day
___
No matter what, do not create angry monkeys. Stay turned for more details.

You can use message formatting in the post message, and if you want create a post with two separate title/message combos, separate them with three line breaks like so:

post to news
Message Title One
___
Message Body One
Message Title Two
___
Message Body Two

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Read-only slack channels. Announcements, Ban hammer and more.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

chainbot.js

chainbot is a slackbot who watches over the ChainCoin slack channel while we sleep. For now, it can turn certain Slack channels into read only channels by deleting all messages that are posted to that channel. In the future, we will add support for vote banning, moderator banning, and also allow the bot to answer questions. This bot is based off of the excellent brianwilliams.js bot by Tyler Shambora - thank you for your code!!

Getting Started

Installing

  1. Create a new Heroku app
  2. Create Slack app
  3. Get Slack bot token, as well as Slack admin/god token
  4. Clone this repo
  5. Push the code up to your Heroku app
  6. Add the following config vars to your heroku app
BOT_TOKEN
PORT
CLIENT_ID
CLIENT_SECRET
MEGA_TOKEN
READ_ONLY_CHANNELS
LISTEN_CHANNELS
ANNOUNCER_USERS
MODERATOR_USERS
UPDATE_USERS
HAPPY_REACTIONS
ANGRY_REACTIONS

where:

  • BOT_TOKEN is the bot's token from your Slack app
  • PORT is the port the bot api will bind to (set this to 80 for default behaviour)
  • CLIENT_ID is the client id from your Slack app
  • CLIENT_SECRET is the client secret from your Slack app
  • MEGA_TOKEN is the admin/god token of an admin user in Slack
  • READ_ONLY_CHANNELS are the channel ids of channels you want the bot to keep as read-only (separated by commas)
  • LISTEN_CHANNELS are the channel ids of channels you want the bot to listen to (separated by commas)
  • ANNOUNCER_USERS is a list of user ids that can post through the bot to the read only channels (separated by commas)
  • MODERATOR_USERS is a list of user ids that are allowed to use the moderation features (separated by commas)
  • UPDATE_USERS is a list of user ids that are allowed to use the update features (separated by commas)
  • HAPPY_REACTIONS is a list of emojis the bot will use when reacting in a happy manner (separated by commas)
  • ANGRY_REACTIONS is a list of emojis the bot will use when reacting in an angry manner (separated by commas)

To get the ids of the channels and users you can use the slack api with your token and a tool such as https://www.hurl.it/

Once you've finished all the prior steps and deployed your bot to your Heroku server, visit https://[YOUR HEROKU APP URL].com/login to authenticate your bot. Once you've completed the authentication process, the bot should be a part of your team. Add people to the appropriate whitelists and also channels that you'd like to make read only.

Alternatively, you can use a local node.js server to host the bot. One way of doing this is to use the dotenv module (https://github.com/motdotla/dotenv) to prepare the environment with the needed variables above. An example template.env has been included for this purpose.

Example Message

While the channels are read-only and all messages are immediately deleted, the bot is allowed to post to the channel and he won't delete his own posts. This is useful if you want to make a designated announcements channel that the bot can post to but everyone else's messages are deleted as to not distract from the announcements the bot posts. In order to post to a read-only channel via. the bot, send him a message with this format:

post to [channel name]
[post title]
___
[post message]

for example:

post to development-
Warning of the Day
___
No matter what, do not create angry monkeys. Stay turned for more details.

You can use message formatting in the post message, and if you want create a post with two separate title/message combos, separate them with three line breaks like so:

post to news
Message Title One
___
Message Body One
Message Title Two
___
Message Body Two

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Read-only slack channels. Announcements, Ban hammer and more.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

chainbot.js

chainbot is a slackbot who watches over the ChainCoin slack channel while we sleep. For now, it can turn certain Slack channels into read only channels by deleting all messages that are posted to that channel. In the future, we will add support for vote banning, moderator banning, and also allow the bot to answer questions. This bot is based off of the excellent brianwilliams.js bot by Tyler Shambora - thank you for your code!!

Getting Started

Installing

  1. Create a new Heroku app
  2. Create Slack app
  3. Get Slack bot token, as well as Slack admin/god token
  4. Clone this repo
  5. Push the code up to your Heroku app
  6. Add the following config vars to your heroku app
BOT_TOKEN
PORT
CLIENT_ID
CLIENT_SECRET
MEGA_TOKEN
READ_ONLY_CHANNELS
LISTEN_CHANNELS
ANNOUNCER_USERS
MODERATOR_USERS
UPDATE_USERS
HAPPY_REACTIONS
ANGRY_REACTIONS

where:

  • BOT_TOKEN is the bot's token from your Slack app
  • PORT is the port the bot api will bind to (set this to 80 for default behaviour)
  • CLIENT_ID is the client id from your Slack app
  • CLIENT_SECRET is the client secret from your Slack app
  • MEGA_TOKEN is the admin/god token of an admin user in Slack
  • READ_ONLY_CHANNELS are the channel ids of channels you want the bot to keep as read-only (separated by commas)
  • LISTEN_CHANNELS are the channel ids of channels you want the bot to listen to (separated by commas)
  • ANNOUNCER_USERS is a list of user ids that can post through the bot to the read only channels (separated by commas)
  • MODERATOR_USERS is a list of user ids that are allowed to use the moderation features (separated by commas)
  • UPDATE_USERS is a list of user ids that are allowed to use the update features (separated by commas)
  • HAPPY_REACTIONS is a list of emojis the bot will use when reacting in a happy manner (separated by commas)
  • ANGRY_REACTIONS is a list of emojis the bot will use when reacting in an angry manner (separated by commas)

To get the ids of the channels and users you can use the slack api with your token and a tool such as https://www.hurl.it/

Once you've finished all the prior steps and deployed your bot to your Heroku server, visit https://[YOUR HEROKU APP URL].com/login to authenticate your bot. Once you've completed the authentication process, the bot should be a part of your team. Add people to the appropriate whitelists and also channels that you'd like to make read only.

Alternatively, you can use a local node.js server to host the bot. One way of doing this is to use the dotenv module (https://github.com/motdotla/dotenv) to prepare the environment with the needed variables above. An example template.env has been included for this purpose.

Example Message

While the channels are read-only and all messages are immediately deleted, the bot is allowed to post to the channel and he won't delete his own posts. This is useful if you want to make a designated announcements channel that the bot can post to but everyone else's messages are deleted as to not distract from the announcements the bot posts. In order to post to a read-only channel via. the bot, send him a message with this format:

post to [channel name]
[post title]
___
[post message]

for example:

post to development-
Warning of the Day
___
No matter what, do not create angry monkeys. Stay turned for more details.

You can use message formatting in the post message, and if you want create a post with two separate title/message combos, separate them with three line breaks like so:

post to news
Message Title One
___
Message Body One
Message Title Two
___
Message Body Two

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Read-only slack channels. Announcements, Ban hammer and more.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

chainbot.js

chainbot is a slackbot who watches over the ChainCoin slack channel while we sleep. For now, it can turn certain Slack channels into read only channels by deleting all messages that are posted to that channel. In the future, we will add support for vote banning, moderator banning, and also allow the bot to answer questions. This bot is based off of the excellent brianwilliams.js bot by Tyler Shambora - thank you for your code!!

Getting Started

Installing

  1. Create a new Heroku app
  2. Create Slack app
  3. Get Slack bot token, as well as Slack admin/god token
  4. Clone this repo
  5. Push the code up to your Heroku app
  6. Add the following config vars to your heroku app
BOT_TOKEN
PORT
CLIENT_ID
CLIENT_SECRET
MEGA_TOKEN
READ_ONLY_CHANNELS
LISTEN_CHANNELS
ANNOUNCER_USERS
MODERATOR_USERS
UPDATE_USERS
HAPPY_REACTIONS
ANGRY_REACTIONS

where:

  • BOT_TOKEN is the bot's token from your Slack app
  • PORT is the port the bot api will bind to (set this to 80 for default behaviour)
  • CLIENT_ID is the client id from your Slack app
  • CLIENT_SECRET is the client secret from your Slack app
  • MEGA_TOKEN is the admin/god token of an admin user in Slack
  • READ_ONLY_CHANNELS are the channel ids of channels you want the bot to keep as read-only (separated by commas)
  • LISTEN_CHANNELS are the channel ids of channels you want the bot to listen to (separated by commas)
  • ANNOUNCER_USERS is a list of user ids that can post through the bot to the read only channels (separated by commas)
  • MODERATOR_USERS is a list of user ids that are allowed to use the moderation features (separated by commas)
  • UPDATE_USERS is a list of user ids that are allowed to use the update features (separated by commas)
  • HAPPY_REACTIONS is a list of emojis the bot will use when reacting in a happy manner (separated by commas)
  • ANGRY_REACTIONS is a list of emojis the bot will use when reacting in an angry manner (separated by commas)

To get the ids of the channels and users you can use the slack api with your token and a tool such as https://www.hurl.it/

Once you've finished all the prior steps and deployed your bot to your Heroku server, visit https://[YOUR HEROKU APP URL].com/login to authenticate your bot. Once you've completed the authentication process, the bot should be a part of your team. Add people to the appropriate whitelists and also channels that you'd like to make read only.

Alternatively, you can use a local node.js server to host the bot. One way of doing this is to use the dotenv module (https://github.com/motdotla/dotenv) to prepare the environment with the needed variables above. An example template.env has been included for this purpose.

Example Message

While the channels are read-only and all messages are immediately deleted, the bot is allowed to post to the channel and he won't delete his own posts. This is useful if you want to make a designated announcements channel that the bot can post to but everyone else's messages are deleted as to not distract from the announcements the bot posts. In order to post to a read-only channel via. the bot, send him a message with this format:

post to [channel name]
[post title]
___
[post message]

for example:

post to development-
Warning of the Day
___
No matter what, do not create angry monkeys. Stay turned for more details.

You can use message formatting in the post message, and if you want create a post with two separate title/message combos, separate them with three line breaks like so:

post to news
Message Title One
___
Message Body One
Message Title Two
___
Message Body Two

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Read-only slack channels. Announcements, Ban hammer and more.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

chainbot.js

chainbot is a slackbot who watches over the ChainCoin slack channel while we sleep. For now, it can turn certain Slack channels into read only channels by deleting all messages that are posted to that channel. In the future, we will add support for vote banning, moderator banning, and also allow the bot to answer questions. This bot is based off of the excellent brianwilliams.js bot by Tyler Shambora - thank you for your code!!

Getting Started

Installing

  1. Create a new Heroku app
  2. Create Slack app
  3. Get Slack bot token, as well as Slack admin/god token
  4. Clone this repo
  5. Push the code up to your Heroku app
  6. Add the following config vars to your heroku app
BOT_TOKEN
PORT
CLIENT_ID
CLIENT_SECRET
MEGA_TOKEN
READ_ONLY_CHANNELS
LISTEN_CHANNELS
ANNOUNCER_USERS
MODERATOR_USERS
UPDATE_USERS
HAPPY_REACTIONS
ANGRY_REACTIONS

where:

  • BOT_TOKEN is the bot's token from your Slack app
  • PORT is the port the bot api will bind to (set this to 80 for default behaviour)
  • CLIENT_ID is the client id from your Slack app
  • CLIENT_SECRET is the client secret from your Slack app
  • MEGA_TOKEN is the admin/god token of an admin user in Slack
  • READ_ONLY_CHANNELS are the channel ids of channels you want the bot to keep as read-only (separated by commas)
  • LISTEN_CHANNELS are the channel ids of channels you want the bot to listen to (separated by commas)
  • ANNOUNCER_USERS is a list of user ids that can post through the bot to the read only channels (separated by commas)
  • MODERATOR_USERS is a list of user ids that are allowed to use the moderation features (separated by commas)
  • UPDATE_USERS is a list of user ids that are allowed to use the update features (separated by commas)
  • HAPPY_REACTIONS is a list of emojis the bot will use when reacting in a happy manner (separated by commas)
  • ANGRY_REACTIONS is a list of emojis the bot will use when reacting in an angry manner (separated by commas)

To get the ids of the channels and users you can use the slack api with your token and a tool such as https://www.hurl.it/

Once you've finished all the prior steps and deployed your bot to your Heroku server, visit https://[YOUR HEROKU APP URL].com/login to authenticate your bot. Once you've completed the authentication process, the bot should be a part of your team. Add people to the appropriate whitelists and also channels that you'd like to make read only.

Alternatively, you can use a local node.js server to host the bot. One way of doing this is to use the dotenv module (https://github.com/motdotla/dotenv) to prepare the environment with the needed variables above. An example template.env has been included for this purpose.

Example Message

While the channels are read-only and all messages are immediately deleted, the bot is allowed to post to the channel and he won't delete his own posts. This is useful if you want to make a designated announcements channel that the bot can post to but everyone else's messages are deleted as to not distract from the announcements the bot posts. In order to post to a read-only channel via. the bot, send him a message with this format:

post to [channel name]
[post title]
___
[post message]

for example:

post to development-
Warning of the Day
___
No matter what, do not create angry monkeys. Stay turned for more details.

You can use message formatting in the post message, and if you want create a post with two separate title/message combos, separate them with three line breaks like so:

post to news
Message Title One
___
Message Body One
Message Title Two
___
Message Body Two

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Read-only slack channels. Announcements, Ban hammer and more.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

chainbot.js

chainbot is a slackbot who watches over the ChainCoin slack channel while we sleep. For now, it can turn certain Slack channels into read only channels by deleting all messages that are posted to that channel. In the future, we will add support for vote banning, moderator banning, and also allow the bot to answer questions. This bot is based off of the excellent brianwilliams.js bot by Tyler Shambora - thank you for your code!!

Getting Started

Installing

  1. Create a new Heroku app
  2. Create Slack app
  3. Get Slack bot token, as well as Slack admin/god token
  4. Clone this repo
  5. Push the code up to your Heroku app
  6. Add the following config vars to your heroku app
BOT_TOKEN
PORT
CLIENT_ID
CLIENT_SECRET
MEGA_TOKEN
READ_ONLY_CHANNELS
LISTEN_CHANNELS
ANNOUNCER_USERS
MODERATOR_USERS
UPDATE_USERS
HAPPY_REACTIONS
ANGRY_REACTIONS

where:

  • BOT_TOKEN is the bot's token from your Slack app
  • PORT is the port the bot api will bind to (set this to 80 for default behaviour)
  • CLIENT_ID is the client id from your Slack app
  • CLIENT_SECRET is the client secret from your Slack app
  • MEGA_TOKEN is the admin/god token of an admin user in Slack
  • READ_ONLY_CHANNELS are the channel ids of channels you want the bot to keep as read-only (separated by commas)
  • LISTEN_CHANNELS are the channel ids of channels you want the bot to listen to (separated by commas)
  • ANNOUNCER_USERS is a list of user ids that can post through the bot to the read only channels (separated by commas)
  • MODERATOR_USERS is a list of user ids that are allowed to use the moderation features (separated by commas)
  • UPDATE_USERS is a list of user ids that are allowed to use the update features (separated by commas)
  • HAPPY_REACTIONS is a list of emojis the bot will use when reacting in a happy manner (separated by commas)
  • ANGRY_REACTIONS is a list of emojis the bot will use when reacting in an angry manner (separated by commas)

To get the ids of the channels and users you can use the slack api with your token and a tool such as https://www.hurl.it/

Once you've finished all the prior steps and deployed your bot to your Heroku server, visit https://[YOUR HEROKU APP URL].com/login to authenticate your bot. Once you've completed the authentication process, the bot should be a part of your team. Add people to the appropriate whitelists and also channels that you'd like to make read only.

Alternatively, you can use a local node.js server to host the bot. One way of doing this is to use the dotenv module (https://github.com/motdotla/dotenv) to prepare the environment with the needed variables above. An example template.env has been included for this purpose.

Example Message

While the channels are read-only and all messages are immediately deleted, the bot is allowed to post to the channel and he won't delete his own posts. This is useful if you want to make a designated announcements channel that the bot can post to but everyone else's messages are deleted as to not distract from the announcements the bot posts. In order to post to a read-only channel via. the bot, send him a message with this format:

post to [channel name]
[post title]
___
[post message]

for example:

post to development-
Warning of the Day
___
No matter what, do not create angry monkeys. Stay turned for more details.

You can use message formatting in the post message, and if you want create a post with two separate title/message combos, separate them with three line breaks like so:

post to news
Message Title One
___
Message Body One
Message Title Two
___
Message Body Two

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

About

Read-only slack channels. Announcements, Ban hammer and more.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages