Guest User

Untitled

a guest
Nov 19th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. const token = process.env.SLACK_TOKEN
  2. const Slack = require('slack')
  3. const bot = new Slack({token})
  4.  
  5. const CHANNEL = process.argv[2];
  6. const SINCE = process.argv[3];
  7. const UNTIL = process.argv[4];
  8.  
  9. function toSlackTime(t) {
  10. return new Date(t).getTime() / 1000.0;
  11. }
  12.  
  13. async function getConversation(channelId) {
  14. let more = true;
  15. let messages = [];
  16. let since = toSlackTime(SINCE);
  17. let until = toSlackTime(UNTIL);
  18.  
  19. while(more) {
  20. const response = await bot.conversations.history({
  21. channel: channelId,
  22. oldest: since,
  23. latest: until,
  24. });
  25. messages = messages.concat(response.messages);
  26. more = response.has_more;
  27. until = messages[messages.length - 1].ts;
  28. }
  29. return messages;
  30. }
  31.  
  32. (async function main() {
  33. const users = (await bot.users.list({}))
  34. .members
  35. .reduce((us, u) => { us[u.id] = u.real_name; return us }, {});
  36.  
  37. const channels = (await bot.channels.list({exclude_archived: false}))
  38. .channels
  39. .filter(c => !c.is_private && (!CHANNEL || c.name == CHANNEL));
  40.  
  41. const conversations = channels.map(
  42. c => ({name: c.name, messages: getConversation(c.id)}));
  43.  
  44. conversations.map(({name, messages}) => {
  45. messages.then(messages => {
  46. messages
  47. .filter(m => m.type == 'message')
  48. .reverse()
  49. .map(m => {
  50. const time = new Date(parseFloat(m.ts) * 1000)
  51. .toLocaleTimeString('en-US', {hour12: false})
  52.  
  53. if(m.reactions) {
  54. const reactions = m.reactions
  55. .map(r => `:${r.name}:(${r.users.map(u => users[u]).join(', ')})`)
  56. .join(', ');
  57. console.log(`[${time}] ${users[m.user]}: ${m.text} [${reactions}]`);
  58. } else {
  59. console.log(`[${time}] ${users[m.user]}: ${m.text}`);
  60. }
  61. });
  62. });
  63. });
  64. })();
Add Comment
Please, Sign In to add comment