আমাদের কাছে বর্তমানে Sla 8 কে বার্তা সহ একটি স্ল্যাক চ্যানেল রয়েছে যা সবই জেনকিন্স ইন্টিগ্রেশন থেকে আসে। চ্যানেল থেকে সমস্ত বার্তা মুছে ফেলার কোনও প্রোগ্রামিক উপায় আছে কি? ওয়েব ইন্টারফেসটি একবারে কেবলমাত্র 100 টি বার্তা মুছতে পারে।
উত্তর:
আমি দ্রুত খুঁজে পেয়েছি যে কেউ ইতিমধ্যে একজন সহায়ক তৈরি করেছেন: এর জন্য স্ল্যাক-ক্লিনার ।
এবং আমার জন্য এটি ঠিক:
slack-cleaner --token=<TOKEN> --message --channel jenkins --user "*" --perform
--user "*"
এটি কাজ করা প্রয়োজন। এছাড়াও যদি আপনি বাস্তবে অপসারণ কার্য সম্পাদন করতে চান তবে আপনার যুক্ত করা উচিত --perform
।
--quiet
প্রদর্শন না প্রতি বার্তা stdout- এ এ মোছা হচ্ছে।
আমি সরকারী / ব্যক্তিগত চ্যানেল এবং চ্যাট থেকে বার্তা মুছে ফেলার জন্য একটি সহজ নোড স্ক্রিপ্ট লিখেছিলাম। আপনি এটি পরিবর্তন ও ব্যবহার করতে পারেন।
https://gist.github.com/firatkucuk/ee898bc919021da621689f5e47e7abac
প্রথমে স্ক্রিপ্ট কনফিগারেশন বিভাগে আপনার টোকেন পরিবর্তন করুন এবং স্ক্রিপ্টটি চালান:
node ./delete-slack-messages CHANNEL_ID
এছাড়াও, ব্রাউজারে স্ল্যাক খুললে চ্যানেল আইডি ব্রাউজারের URL এ দেখা যায়। যেমন
https://mycompany.slack.com/messages/MY_CHANNEL_ID/
বা
https://app.slack.com/client/WORKSPACE_ID/MY_CHANNEL_ID
ডিফল্ট ক্লিন কমান্ড নিম্নলিখিত ত্রুটি দেওয়ার জন্য আমার পক্ষে কাজ করে নি:
$ 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 সেকেন্ডের হার-সীমা ব্যবহার করি । উভয় ক্ষেত্রেই, চ্যানেলের নাম #
চিহ্ন ছাড়াই সরবরাহ করা হয়েছিল
!!হালনাগাদ!!
@ নিলস-ভ্যান-রিজমার্সডাল মন্তব্যে শুভেচ্ছা হিসাবে
এই বৈশিষ্ট্যটি সরানো হয়েছে। আরও তথ্যের জন্য এই থ্রেডটি দেখুন: twitter.com/slackhq/status/467182697979588608?lang=en
!! শেষ আপডেট !!
টুইটারে স্ল্যাকএইচকিউর থেকে একটি দুর্দান্ত উত্তর দেওয়া হয়েছে এবং এটি কোনও তৃতীয় পক্ষের জিনিস ছাড়াই কাজ করে। https://twitter.com/slackhq/status/467182697979588608?lang=en
আপনি একটি নির্দিষ্ট চ্যানেলের জন্য সংরক্ষণাগার ( http://my.slack.com / সংরক্ষণাগার ) পৃষ্ঠা মাধ্যমে বাল্ক মুছতে পারেন : মেনুতে "বার্তাগুলি মুছুন" অনুসন্ধান করুন
যে কারও জন্য এটি প্রোগ্রাম্যাটিক করার প্রয়োজন নেই, এখানে একটি দ্রুত উপায় :
(সম্ভবত কেবল অর্থ প্রদান করা ব্যবহারকারীদের জন্য)
চ্যানেলটি কিছু প্রসঙ্গে রেখে যাওয়ার জন্য আমি সাধারণত এই বিকল্পটি "1 দিন" তে সেট করে রেখেছি, তারপরে আমি উপরের সেটিংসগুলিতে ফিরে যাই এবং এটিকে এখন থেকে সঞ্চয় করতে চালিয়ে যাওয়ার জন্য এটি ধরে রাখার নীতিটি "ডিফল্ট" এ ফিরে সেট করি ।
নোটস:
লুক উল্লেখ করেছেন: বিকল্পটি গোপন থাকলে: আপনাকে বৈশ্বিক কর্মক্ষেত্র প্রশাসনের সেটিংস, বার্তা ধরে রাখা এবং মুছে ফেলাতে হবে এবং "কর্মক্ষেত্রের সদস্যদের এই সেটিংসগুলিকে ওভাররাইড করতে দিন" পরীক্ষা করতে হবে
বিকল্প 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 পদ্ধতিগুলি চ্যানেল * * গোষ্ঠীর পরিবর্তে *
টিপ: আপনি যদি স্ল্যাক ক্লিনার ব্যবহার করতে চান তবে https://github.com/kfei/slack-cleaner
আপনাকে একটি টোকেন তৈরি করতে হবে: https://api.slack.com/custom-integrations/legacy-tokens
অন্যান্য উত্তরগুলি ইঙ্গিত করে, স্ল্যাকের হার সীমা এই কৌশলটিকে আরও জটিল করে তোলে - তাদের চ্যাট.ডিলিট এপিআইয়ের জন্য হারের সীমা তুলনামূলকভাবে কম 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/
আপনি যদি পাইথন পছন্দ করেন এবং স্ল্যাক এপিআই থেকে কোনও লিগ্যাসি এপিআই টোকেন পেয়ে থাকেন , আপনি নীচের সাথে কোনও ব্যবহারকারীর কাছে প্রেরিত সমস্ত ব্যক্তিগত বার্তা মুছতে পারেন:
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()
আপনার কর্মক্ষেত্রের সমস্ত স্ল্যাক বার্তাগুলি মোছার জন্য একটি স্ল্যাক সরঞ্জাম রয়েছে। এটি দেখুন: https://www.messagebender.com
আপনার স্ল্যাক চ্যানেল / গোষ্ঠী / ইম বার্তাগুলি মুছে ফেলার জন্য এখানে দুর্দান্ত ক্রোম এক্সটেনশান রয়েছে - https://slackext.com/deleter , যেখানে আপনি তারকা, সময়সীমা বা ব্যবহারকারীদের দ্বারা বার্তাগুলি ফিল্টার করতে পারবেন। বিটিডাব্লু, এটি সাম্প্রতিক সংস্করণে সমস্ত বার্তা লোড সমর্থন করে, তারপরে আপনি আপনার প্রয়োজন হিসাবে আপনার ~ 8k বার্তা লোড করতে পারেন।