কোনও চ্যানেলে সমস্ত বার্তা (~ 8 কে) স্ল্যাক পরিষ্কার করুন


85

আমাদের কাছে বর্তমানে Sla 8 কে বার্তা সহ একটি স্ল্যাক চ্যানেল রয়েছে যা সবই জেনকিন্স ইন্টিগ্রেশন থেকে আসে। চ্যানেল থেকে সমস্ত বার্তা মুছে ফেলার কোনও প্রোগ্রামিক উপায় আছে কি? ওয়েব ইন্টারফেসটি একবারে কেবলমাত্র 100 টি বার্তা মুছতে পারে।

উত্তর:


71

আমি দ্রুত খুঁজে পেয়েছি যে কেউ ইতিমধ্যে একজন সহায়ক তৈরি করেছেন: এর জন্য স্ল্যাক-ক্লিনার

এবং আমার জন্য এটি ঠিক:

slack-cleaner --token=<TOKEN> --message --channel jenkins --user "*" --perform


আর অপশনটি এনপিএম থেকে আসে , এখনও চেষ্টা করে দেখেনি
হ্যান

4
আমি আমার টোকেন এবং চ্যানেলটি কোথায় খুঁজে পাব?
kk78626

6
--user "*"এটি কাজ করা প্রয়োজন। এছাড়াও যদি আপনি বাস্তবে অপসারণ কার্য সম্পাদন করতে চান তবে আপনার যুক্ত করা উচিত --perform
শায়ান সালেহিয়ান

7
Github.com/sgratzl/slack-cleaner কাঁটাচামচ আরো সক্রিয় এবং মত বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়েছে --quietপ্রদর্শন না প্রতি বার্তা stdout- এ এ মোছা হচ্ছে।
ধাঁধা

25

আমি সরকারী / ব্যক্তিগত চ্যানেল এবং চ্যাট থেকে বার্তা মুছে ফেলার জন্য একটি সহজ নোড স্ক্রিপ্ট লিখেছিলাম। আপনি এটি পরিবর্তন ও ব্যবহার করতে পারেন।

https://gist.github.com/firatkucuk/ee898bc919021da621689f5e47e7abac

প্রথমে স্ক্রিপ্ট কনফিগারেশন বিভাগে আপনার টোকেন পরিবর্তন করুন এবং স্ক্রিপ্টটি চালান:

node ./delete-slack-messages CHANNEL_ID

একটি OAuth টোকেন পান:

  1. Https://api.slack.com/apps এ যান
  2. 'নতুন অ্যাপ তৈরি করুন' এ ক্লিক করুন এবং আপনার (অস্থায়ী) অ্যাপটির নাম দিন।
  3. পাশের নেভিতে, 'ওউথ এবং অনুমতিগুলি' এ যান
  4. সেই পৃষ্ঠায়, 'স্কোপস' বিভাগটি সন্ধান করুন। 'একটি ওআউথ স্কোপ যুক্ত করুন' ক্লিক করুন এবং 'চ্যানেল: ইতিহাস' এবং 'চ্যাট: লিখুন' যোগ করুন। (স্কোপগুলি দেখুন)
  5. পৃষ্ঠার শীর্ষে, 'ওয়ার্কস্পেসে অ্যাপ্লিকেশন ইনস্টল করুন' ক্লিক করুন। নিশ্চিত করুন, এবং পৃষ্ঠাটি পুনরায় লোডে, OAuth অ্যাক্সেস টোকন অনুলিপি করুন।

চ্যানেল আইডি সন্ধান করুন

এছাড়াও, ব্রাউজারে স্ল্যাক খুললে চ্যানেল আইডি ব্রাউজারের URL এ দেখা যায়। যেমন

https://mycompany.slack.com/messages/MY_CHANNEL_ID/

বা

https://app.slack.com/client/WORKSPACE_ID/MY_CHANNEL_ID

4
তার জন্য ধন্যবাদ. একটি জিনিস আমি লক্ষ্য করি তা হ'ল কয়েকটি বার্তা মোছার পরে এটি ধীর হয়।
বার্টল

4
সাধারণত, হারের সীমাবদ্ধতা থাকে। একারণেই মুছে ফেলা অপারেশনগুলি স্টল বা গতিতে চলেছে।
F:5rat KıK

4
একটি যাদুমন্ত্র মত কাজ করে! এর জন্য ধন্যবাদ!
ব্রায়ান্রিয়া

4
এটি ব্যবহার করা সহজ, মিষ্টি। নোট করুন যে উপরের উত্তরটি বর্তমানে লিগ্যাসি টোকেনগুলি ব্যবহার করার জন্য বলেছে, যা আর সমর্থিত নয়, তবে ফিরাত ইতিমধ্যে সেই তথ্যটি সহিস্টিটি আপডেট করেছে এবং প্রয়োজনীয় OAuth স্কোপের তালিকা দেয়। OAuth টোকেন পেতে এবং স্কোপের তালিকা যুক্ত করতে স্ল্যাক অ্যাপ্লিকেশনটি তৈরি করা আশ্চর্যজনকভাবে দ্রুত-এন-সহজ ছিল 100 আমি 100 সেকেন্ডের মধ্যে কথা বলছি।
ড্যারেন

23

ডিফল্ট ক্লিন কমান্ড নিম্নলিখিত ত্রুটি দেওয়ার জন্য আমার পক্ষে কাজ করে নি:

$ slack-cleaner --token=<TOKEN> --message --channel <CHANNEL>

Running slack-cleaner v0.2.4
Channel, direct message or private group not found

তবে নিম্নলিখিতগুলি বট বার্তাগুলি পরিষ্কার করতে কোনও সমস্যা ছাড়াই কাজ করেছে

slack-cleaner --token <TOKEN> --message --group <CHANNEL> --bot --perform --rate 1 

বা

slack-cleaner --token <TOKEN> --message --group <CHANNEL> --user "*" --perform --rate 1 

সমস্ত বার্তা পরিষ্কার করতে।

আমি HTTP 429 Too Many Requestsস্ল্যাক এপিআই হারের সীমাটির কারণে ত্রুটি এড়াতে 1 সেকেন্ডের হার-সীমা ব্যবহার করি । উভয় ক্ষেত্রেই, চ্যানেলের নাম #চিহ্ন ছাড়াই সরবরাহ করা হয়েছিল


11

!!হালনাগাদ!!

@ নিলস-ভ্যান-রিজমার্সডাল মন্তব্যে শুভেচ্ছা হিসাবে

এই বৈশিষ্ট্যটি সরানো হয়েছে। আরও তথ্যের জন্য এই থ্রেডটি দেখুন: twitter.com/slackhq/status/467182697979588608?lang=en

!! শেষ আপডেট !!

টুইটারে স্ল্যাকএইচকিউর থেকে একটি দুর্দান্ত উত্তর দেওয়া হয়েছে এবং এটি কোনও তৃতীয় পক্ষের জিনিস ছাড়াই কাজ করে। https://twitter.com/slackhq/status/467182697979588608?lang=en

আপনি একটি নির্দিষ্ট চ্যানেলের জন্য সংরক্ষণাগার ( http://my.slack.com / সংরক্ষণাগার ) পৃষ্ঠা মাধ্যমে বাল্ক মুছতে পারেন : মেনুতে "বার্তাগুলি মুছুন" অনুসন্ধান করুন


4
এটি কেবল সেখানে রেখে দেওয়া, এটি কেবল চ্যানেলের জন্য কাজ করে না সরাসরি বার্তাগুলির জন্য।
TheRodeo

4
এটি কেবলমাত্র শেষ 10 বার্তাগুলি মুছে
ফেলবে

4
না, আমি এই পদ্ধতির সাহায্যে প্রচুর বার্তা মুছে ফেলতাম। এটি প্রায় 100 বা কিছু ছিল।
ব্রেগগেই

4
আমি কেবল এটি ব্যবহার করেছি। প্রথমটি যদি কেবল 10 দেখায় তবে একবারে আমি সেগুলি মুছে ফেললে এটি বাকীটি দেখায় (চ্যানেলে মোট 100 টিরও কম বার্তা ছিল, সুতরাং এটি এখনও 100 এর মধ্যে সীমাবদ্ধ থাকতে পারে)।
অ্যালবিন

6
এটি আমার পক্ষে কাজ করে না বলে মনে হচ্ছে। এটি http: // <teamname> .slack.com / messages / <messageid> (আমি দেখেছি শেষ চ্যানেল হিসাবে প্রদর্শিত হবে)
শয়তানের অ্যাডভোকেট

10

যে কারও জন্য এটি প্রোগ্রাম্যাটিক করার প্রয়োজন নেই, এখানে একটি দ্রুত উপায় :

(সম্ভবত কেবল অর্থ প্রদান করা ব্যবহারকারীদের জন্য)

  1. ওয়েব বা ডেস্কটপ অ্যাপ্লিকেশনে চ্যানেলটি খুলুন এবং কগ (উপরে ডানদিকে) ক্লিক করুন।
  2. সংরক্ষণাগার মেনু আনতে "অতিরিক্ত বিকল্প ..." চয়ন করুন। মন্তব্য
  3. "চ্যানেল বার্তা ধরে রাখার নীতি সেট করুন" নির্বাচন করুন।
  4. "নির্দিষ্ট দিনের জন্য সমস্ত বার্তা পুনরুদ্ধার করুন" সেট করুন।
  5. এই সময়ের চেয়ে পুরানো সমস্ত বার্তা স্থায়ীভাবে মুছে ফেলা হবে!

চ্যানেলটি কিছু প্রসঙ্গে রেখে যাওয়ার জন্য আমি সাধারণত এই বিকল্পটি "1 দিন" তে সেট করে রেখেছি, তারপরে আমি উপরের সেটিংসগুলিতে ফিরে যাই এবং এটিকে এখন থেকে সঞ্চয় করতে চালিয়ে যাওয়ার জন্য এটি ধরে রাখার নীতিটি "ডিফল্ট" এ ফিরে সেট করি

নোটস:
লুক উল্লেখ করেছেন: বিকল্পটি গোপন থাকলে: আপনাকে বৈশ্বিক কর্মক্ষেত্র প্রশাসনের সেটিংস, বার্তা ধরে রাখা এবং মুছে ফেলাতে হবে এবং "কর্মক্ষেত্রের সদস্যদের এই সেটিংসগুলিকে ওভাররাইড করতে দিন" পরীক্ষা করতে হবে


4
আসলে এটি কেবল লুকানো। এটি প্রদর্শিত হওয়ার জন্য আপনাকে গ্লোবাল ওয়ার্কস্পেস অ্যাডমিন সেটিংসে যেতে হবে, বার্তা ধরে রাখা এবং মুছে ফেলতে হবে এবং "ওয়ার্কস্পেস সদস্যদের এই সেটিংসকে ওভাররাইড করতে দিন" চেক করতে হবে।
লুক

ধন্যবাদ, আমি আপনার মন্তব্য অন্তর্ভুক্ত আপডেট করেছি। এছাড়াও দয়া করে নোট করুন আমরা এমনকি প্রাক-প্রাকৃতিকভাবে মুছে ফেলার জন্য ডে-টাইমের জন্য স্ল্যাককে প্রদান করার প্রস্তাব দিয়েছিলাম, কিন্তু তারা বলেছে এটি কেবলমাত্র উদ্যোগের সংস্করণ (ডেটা সংরক্ষণের জন্য ভিন্ন পরিবেশের কারণে) ব্যতীত সম্ভব নয়।
হিকসি

@ হিকসির দ্বারা উল্লিখিত হিসাবে, "বার্তা ধরে রাখা এবং মুছে ফেলা" বিকল্পটি "প্রদত্ত বৈশিষ্ট্য"
ফিলি

4

বিকল্প 1 আপনি 1 দিন পরে স্বয়ংক্রিয়ভাবে বার্তাগুলি মুছতে স্ল্যাক চ্যানেল সেট করতে পারেন তবে এটি কিছুটা গোপন। প্রথমে আপনাকে আপনার স্ল্যাক ওয়ার্কস্পেস সেটিংস, বার্তা ধরে রাখা এবং মুছে ফেলাতে হবে এবং "কর্মক্ষেত্রের সদস্যদের এই সেটিংসগুলিকে ওভাররাইড করতে দিন" চেক করতে হবে। এর পরে, স্ল্যাক ক্লায়েন্টে আপনি একটি চ্যানেল খুলতে পারেন, গিয়ারটি ক্লিক করতে পারেন এবং "বার্তা ধরে রাখার সম্পাদনা সম্পাদনা করুন ..." ক্লিক করুন

বিকল্প 2 স্ল্যাক-ক্লিনার কমান্ড লাইন সরঞ্জাম যা অন্যরা উল্লেখ করেছে।

বিকল্প 3 নীচে একটি সামান্য পাইথন স্ক্রিপ্ট রয়েছে যা আমি ব্যক্তিগত চ্যানেলগুলি সাফ করার জন্য ব্যবহার করি। আপনি মুছে ফেলার আরও প্রোগ্রামিক নিয়ন্ত্রণ চাইলে একটি ভাল সূচনা পয়েন্ট হতে পারে। দুর্ভাগ্যক্রমে স্লকের কোনও বাল্ক-ডিলিট এপিআই নেই, এবং তারা পৃথক মুছতে প্রতি মিনিটে 50-তে রেট-সীমাবদ্ধ করে, তাই এটি অনিবার্যভাবে দীর্ঘ সময় নেয়।

# -*- coding: utf-8 -*-
"""
Requirement: pip install slackclient
"""
import multiprocessing.dummy, ctypes, time, traceback, datetime
from slackclient import SlackClient
legacy_token = raw_input("Enter token of an admin user. Get it from https://api.slack.com/custom-integrations/legacy-tokens >> ")
slack_client = SlackClient(legacy_token)


name_to_id = dict()
res = slack_client.api_call(
  "groups.list", # groups are private channels, conversations are public channels. Different API.
  exclude_members=True, 
  )
print ("Private channels:")
for c in res['groups']:
    print(c['name'])
    name_to_id[c['name']] = c['id']

channel = raw_input("Enter channel name to clear >> ").strip("#")
channel_id = name_to_id[channel]

pool=multiprocessing.dummy.Pool(4) #slack rate-limits the API, so not much benefit to more threads.
count = multiprocessing.dummy.Value(ctypes.c_int,0)
def _delete_message(message):
    try:
        success = False
        while not success:
            res= slack_client.api_call(
                  "chat.delete",
                  channel=channel_id,
                  ts=message['ts']
                )
            success = res['ok']
            if not success:
                if res.get('error')=='ratelimited':
#                    print res
                    time.sleep(float(res['headers']['Retry-After']))
                else:
                    raise Exception("got error: %s"%(str(res.get('error'))))
        count.value += 1
        if count.value % 50==0:
            print(count.value)
    except:
        traceback.print_exc()

retries = 3
hours_in_past = int(raw_input("How many hours in the past should messages be kept? Enter 0 to delete them all. >> "))
latest_timestamp = ((datetime.datetime.utcnow()-datetime.timedelta(hours=hours_in_past)) - datetime.datetime(1970,1,1)).total_seconds()
print("deleting messages...")
while retries > 0:
    #see https://api.slack.com/methods/conversations.history
    res = slack_client.api_call(
      "groups.history",
      channel=channel_id,
      count=1000,
      latest=latest_timestamp,)#important to do paging. Otherwise Slack returns a lot of already-deleted messages.
    if res['messages']:
        latest_timestamp = min(float(m['ts']) for m in res['messages'])
    print datetime.datetime.utcfromtimestamp(float(latest_timestamp)).strftime("%r %d-%b-%Y")

    pool.map(_delete_message, res['messages'])
    if not res["has_more"]: #Slack API seems to lie about this sometimes
        print ("No data. Sleeping...")
        time.sleep(1.0)
        retries -= 1
    else:
        retries=10

print("Done.")

দ্রষ্টব্য, এই স্ক্রিপ্টটির সর্বজনীন চ্যানেলগুলির তালিকা তৈরি ও সাফ করার জন্য সংশোধন করা দরকার। এগুলির জন্য API পদ্ধতিগুলি চ্যানেল * * গোষ্ঠীর পরিবর্তে *



1

অন্যান্য উত্তরগুলি ইঙ্গিত করে, স্ল্যাকের হার সীমা এই কৌশলটিকে আরও জটিল করে তোলে - তাদের চ্যাট.ডিলিট এপিআইয়ের জন্য হারের সীমা তুলনামূলকভাবে কম is 50 প্রতি মিনিটে অনুরোধ।

হারের সীমাটিকে সম্মান করার সেরা কৌশলটি হ'ল আপনি যে চ্যানেলটি সাফ করতে চান তার বার্তাগুলি পুনরুদ্ধার করা, তারপরে 50 বছরের কম বয়সী ব্যাচগুলিতে বার্তাগুলি মুছুন যা এক মিনিটের ব্যবধানে চলে।

আমি এই ব্যাচিংয়ের উদাহরণ সহ একটি প্রকল্প তৈরি করেছি যা আপনি সহজেই অটোকোডে কাঁটাচামচ করতে এবং স্থাপন করতে পারেন - এটি আপনাকে স্ল্যাশ কমান্ডের মাধ্যমে একটি চ্যানেল সাফ করতে দেয় (এবং আপনাকে অবশ্যই কয়েকটি নির্দিষ্ট ব্যবহারকারীদের কাছে কমান্ডের অ্যাক্সেসকে সীমাবদ্ধ করতে দেয়!)! আপনি যখন /cmd clearকোনও চ্যানেলে চালান , এটি সাফ করার জন্য সেই চ্যানেলটিকে চিহ্নিত করে এবং প্রতি মিনিটে নিম্নলিখিত কোডটি চালায় যতক্ষণ না এটি চ্যানেলের সমস্ত বার্তা মুছে দেয়:

console.log(`About to clear ${messages.length} messages from #${channel.name}...`);

let deletionResults = await async.mapLimit(messages, 2, async (message) => {
  try {
    await lib.slack.messages['@0.6.1'].destroy({
      id: clearedChannelId,
      ts: message.ts,
      as_user: true
    });
    return {
      successful: true
    };
  } catch (e) {
    return {
      successful: false,
      retryable: e.message && e.message.indexOf('ratelimited') !== -1
    };
  }
});

আপনি এখানে নিজের কোডটি নিজের সংস্করণে মোতায়েনের জন্য সম্পূর্ণ কোড এবং একটি গাইড দেখতে পারেন: https://autocode.com/src/jacoblee/slack-clear-messages/


0

আপনি যদি পাইথন পছন্দ করেন এবং স্ল্যাক এপিআই থেকে কোনও লিগ্যাসি এপিআই টোকেন পেয়ে থাকেন , আপনি নীচের সাথে কোনও ব্যবহারকারীর কাছে প্রেরিত সমস্ত ব্যক্তিগত বার্তা মুছতে পারেন:

import requests
import sys
import time
from json import loads

# config - replace the bit between quotes with your "token"
token = 'xoxp-854385385283-5438342854238520-513620305190-505dbc3e1c83b6729e198b52f128ad69'

# replace 'Carl' with name of the person you were messaging
dm_name = 'Carl'

# helper methods
api = 'https://slack.com/api/'
suffix = 'token={0}&pretty=1'.format(token)

def fetch(route, args=''):
  '''Make a GET request for data at `url` and return formatted JSON'''
  url = api + route + '?' + suffix + '&' + args
  return loads(requests.get(url).text)

# find the user whose dm messages should be removed
target_user = [i for i in fetch('users.list')['members'] if dm_name in i['real_name']]
if not target_user:
  print(' ! your target user could not be found')
  sys.exit()

# find the channel with messages to the target user
channel = [i for i in fetch('im.list')['ims'] if i['user'] == target_user[0]['id']]
if not channel:
  print(' ! your target channel could not be found')
  sys.exit()

# fetch and delete all messages
print(' * querying for channel', channel[0]['id'], 'with target user', target_user[0]['id'])
args = 'channel=' + channel[0]['id'] + '&limit=100'
result = fetch('conversations.history', args=args)
messages = result['messages']
print(' * has more:', result['has_more'], result.get('response_metadata', {}).get('next_cursor', ''))
while result['has_more']:
  cursor = result['response_metadata']['next_cursor']
  result = fetch('conversations.history', args=args + '&cursor=' + cursor)
  messages += result['messages']
  print(' * next page has more:', result['has_more'])

for idx, i in enumerate(messages):
  # tier 3 method rate limit: https://api.slack.com/methods/chat.delete
  # all rate limits: https://api.slack.com/docs/rate-limits#tiers
  time.sleep(1.05)
  result = fetch('chat.delete', args='channel={0}&ts={1}'.format(channel[0]['id'], i['ts']))
  print(' * deleted', idx+1, 'of', len(messages), 'messages', i['text'])
  if result.get('error', '') == 'ratelimited':
    print('\n ! sorry there have been too many requests. Please wait a little bit and try again.')
    sys.exit()

-1

আপনার কর্মক্ষেত্রের সমস্ত স্ল্যাক বার্তাগুলি মোছার জন্য একটি স্ল্যাক সরঞ্জাম রয়েছে। এটি দেখুন: https://www.messagebender.com


-2

আপনার স্ল্যাক চ্যানেল / গোষ্ঠী / ইম বার্তাগুলি মুছে ফেলার জন্য এখানে দুর্দান্ত ক্রোম এক্সটেনশান রয়েছে - https://slackext.com/deleter , যেখানে আপনি তারকা, সময়সীমা বা ব্যবহারকারীদের দ্বারা বার্তাগুলি ফিল্টার করতে পারবেন। বিটিডাব্লু, এটি সাম্প্রতিক সংস্করণে সমস্ত বার্তা লোড সমর্থন করে, তারপরে আপনি আপনার প্রয়োজন হিসাবে আপনার ~ 8k বার্তা লোড করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.