Зөрчилдөөн дэх мессежийг хэрхэн хурдан арилгах вэ. Шилдэг Discord роботууд

  • Орчуулга

Discord нь хэрэглэгчийн үүсгэсэн контентын нэгэн адил бидний төсөөлж байснаас хурдан өссөөр байна. Илүү олон хэрэглэгчид - чат дахь олон мессеж. Долдугаар сард бид өдөрт 40 сая мессеж, 12-р сард 100 сая мессежийг зарлаж, 1-р сарын дундуур 120 саяыг давлаа. Бид чатын түүхийг үүрд хадгалахаар тэр даруй шийдсэн бөгөөд ингэснээр хэрэглэгчид хүссэн үедээ буцаж, өгөгдөлдөө хандах боломжтой болсон. ямар ч төхөөрөмж. Энэ бол урсгал, хэмжээ нь өсөн нэмэгдэж буй маш их өгөгдөл бөгөөд бүгд бэлэн байх ёстой. Бид үүнийг яаж хийх вэ? Кассандра!

Бид юу хийв

Discord-ийн анхны хувилбарыг 2015 оны эхээр хоёр сар хүрэхгүй хугацаанд бичсэн. Магадгүй хурдан давталт хийх хамгийн сайн мэдээллийн сан бол MongoDB юм. Discord дахь бүх зүйл тусгайлан нэг MongoDB хуулбарын багцад хадгалагдсан байсан ч бид шинэ DBMS руу энгийн шилжихэд зориулж бүх зүйлийг бэлтгэж байсан (бид MongoDB sharding-ийг нарийн төвөгтэй, тодорхойгүй тогтвортой байдлын улмаас ашиглахгүй гэдгээ мэдэж байсан). Үнэн хэрэгтээ энэ нь манай компанийн соёлын нэг хэсэг юм: туршлагаасаа хурдан хөгж шинэ шинж тэмдэгбүтээгдэхүүн, гэхдээ үргэлж илүү найдвартай шийдлийг чиглүүлдэг.

Мессежүүд нь MongoDB цуглуулгад нэг нийлмэл индекс бүхий channel_id болон created_at дээр хадгалагдсан. 2015 оны арваннэгдүгээр сард бид мэдээллийн санд 100 сая мессеж илгээсэн үе шатанд хүрч, дараа нь биднийг хүлээж буй асуудлуудыг ойлгож эхэлсэн: өгөгдөл, индекс нь RAM-д багтахаа больж, саатал урьдчилан таамаглах боломжгүй болсон. Илүү тохиромжтой DBMS руу шилжих цаг болжээ.

Зөв DBMS сонгох

Шинэ DBMS сонгохын өмнө бид унших/бичих боломжууд болон одоогийн шийдэлд яагаад асуудал гарсныг ойлгох хэрэгтэй байсан.
  • Унших нь маш санамсаргүй, унших/бичих харьцаа 50/50 орчим байсан нь хурдан тодорхой болсон.
  • Хүнд дуут чатын серверүүд Discord бараг ямар ч мессеж илгээгээгүй. Өөрөөр хэлбэл, тэд хэдэн өдөр тутамд нэг юмуу хоёр мессеж илгээсэн. Жилийн дотор ийм төрлийн сервер 1000 зурваст хүрэх магадлал багатай. Асуудал нь ийм цөөн тооны мессежтэй байсан ч энэ өгөгдлийг хэрэглэгчдэд хүргэхэд илүү хэцүү байдаг. Хэрэглэгчид 50 мессежийг буцаахад л олон санамсаргүй диск хайлт хийж, дискний кэшийг цэвэрлэхэд хүргэдэг.
  • Хүнд жинтэй Discord хувийн текст чат серверүүд нь зохих хэмжээний мессеж илгээдэг бөгөөд жилд 100К-аас 1 сая хүртэлх зурваст амархан ордог. Тэд ихэвчлэн зөвхөн хамгийн сүүлийн үеийн өгөгдлийг шаарддаг. Асуудал нь эдгээр серверүүд ихэвчлэн 100-аас бага гишүүнтэй байдаг тул өгөгдлийн хүсэлтийн хурд удаан бөгөөд дискний кэшэд байх магадлал багатай байдаг.
  • Олон нийтийн томоохон Discord серверүүд маш их мессеж илгээдэг. Өдөрт мянга мянган мессеж илгээдэг олон мянган гишүүд байдаг. Жилд сая сая мессежийг амархан бичдэг. Тэд бараг үргэлж сүүлийн нэг цагт илгээсэн мессежийг хүсдэг бөгөөд энэ нь байнга тохиолддог. Тиймээс өгөгдөл нь ихэвчлэн дискний кэшэд байдаг.
  • Ирэх онд хэрэглэгчид санамсаргүй уншлага үүсгэх илүү олон арга замтай болно гэдгийг бид мэдэж байсан: сүүлийн 30 хоногийн дотор дурдагдсан зүйлээ үзэж, дараа нь түүхийн тэр мөч рүү шилжих, наалттай нийтлэлүүдийг үзэж, үзэх, мөн бүрэн текст хайлт. Энэ бүхэн нь бүр илүү санамсаргүй уншдаг гэсэн үг!
Дараа нь бид шаардлагаа тодорхойлсон:
  • Шугаман өргөтгөх чадвар- Бид шийдвэрийг дараа нь өөрчлөх эсвэл өгөгдлийг өөр хэлтэрхий рүү гараар шилжүүлэхийг хүсэхгүй байна.
  • Автомат шилжүүлэлт- Бид шөнө унтаж, аль болох Discord-ыг өөрөө эдгээх дуртай.
  • Бага зэрэг дэмжлэг- Бид үүнийг суулгасан даруйдаа ажиллах ёстой. Өгөгдөл нэмэгдэхийн хэрээр бид илүү олон зангилаа нэмэх шаардлагатай.
  • Ажил дээрээ батлагдсанБид шинэ технологийг туршиж үзэх дуртай, гэхдээ тийм ч шинэ биш.
  • Урьдчилан таамаглах боломжтой гүйцэтгэл- API хариу өгөх хугацаа 95% тохиолдолд 80ms-ээс хэтэрсэн тохиолдолд бидэнд мессеж илгээгддэг. Бид мөн Redis эсвэл Memcached дээр мессежүүдийг кэшлэх хэрэгцээтэй тулгарахыг хүсэхгүй байна.
  • Блоб хадгалах сан биш- Хэрэв бид blob-ыг тасралтгүй салгаж, тэдгээрт өгөгдөл хавсаргах шаардлагатай бол секундэд олон мянган мессеж бичих нь тийм ч сайн ажиллахгүй.
  • нээлттэй эх сурвалж- Бид хувь заяагаа өөрөө удирддаг гэдэгт итгэдэг бөгөөд гуравдагч этгээдийн компаниас хамааралтай байхыг хүсэхгүй байна.
Кассандра бол бидний бүх шаардлагыг хангасан цорын ганц DBMS болж хувирсан. Бид зүгээр л томруулах явцад зангилаа нэмэх боломжтой бөгөөд энэ нь аппликешнд ямар ч нөлөө үзүүлэхгүйгээр зангилааны алдагдлыг зохицуулдаг. Netflix, Apple зэрэг томоохон компаниуд мянга мянган Кассандра зангилаатай. Холбогдох өгөгдлийг дискэн дээр зэрэгцүүлэн хадгалдаг бөгөөд энэ нь хамгийн бага хайлт хийх, кластер даяар хялбар түгээх боломжийг олгодог. Үүнийг DataStax хариуцдаг боловч нээлттэйгээр түгээдэг. эх кодболон олон нийтийн хүчнүүд.

Сонголт хийснийхээ дараа түүнийг үнэхээр зөвтгөсөн гэдгээ батлах шаардлагатай байв.

Өгөгдлийн загварчлал

Кассандраг эхлэгчдэд дүрслэх хамгийн сайн арга бол KKV товчлол юм. "K" хоёр үсэг нь үндсэн түлхүүрийг агуулдаг. Эхний "K" нь хуваалтын түлхүүр юм. Энэ нь өгөгдөл нь аль зангилаанд амьдардаг, дискний хаанаас олохыг тодорхойлоход тусална. Хэсэг дотор олон мөр байдаг бөгөөд хэсэг доторх тодорхой эгнээ нь хоёр дахь "K" буюу кластерийн түлхүүрээр тодорхойлогддог. Энэ нь хуваалт доторх үндсэн түлхүүр болж, мөрүүдийг хэрхэн эрэмбэлэхийг тодорхойлдог. Та нэг хэсгийг захиалгат толь бичиг гэж ойлгож болно. Эдгээр бүх чанарууд нь өгөгдлийн маш хүчирхэг загварчлалыг бий болгодог.

MongoDB дахь мессежүүдийг channel_id болон created_at ашиглан индексжүүлсэн гэдгийг санаж байна уу? Бүх зурвасууд сувагт ажилладаг тул channel_id нь хэсгийн түлхүүр болсон боловч created_at ажилладаггүй сайн түлхүүрХоёр мессежийг нэгэн зэрэг үүсгэх боломжтой тул кластер хийх. Аз болоход Discord дээрх ID бүрийг Snowflake-д бүтээдэг бөгөөд энэ нь он цагийн дарааллаар эрэмблэгдсэн гэсэн үг юм. Тиймээс тэдгээрийг ашиглаж болно. Үндсэн түлхүүр нь (channel_id, message_id) болсон бөгөөд мессежийн_id нь Цасан ширхг юм. Энэ нь суваг ачаалагдах үед бид Кассандра руу мессеж хайх тодорхой хүрээг хэлж чадна гэсэн үг юм.

Манай мессежийн хүснэгтийн хялбаршуулсан схемийг энд оруулав (энэ нь 10 орчим баганыг алгасах болно).

ХҮСНЭГТИЙН мессежүүдийг (сувгийн_id bigint, message_id bigint, зохиогчийн_id bigint, агуулгын текст, АНХДАГЧ ТҮЛХҮҮР (сувгийн_id, мессежийн_id)) БҮГДҮҮЛЭХ ЗАХИАЛГААР (message_id DESC);
Кассандрагийн схемүүд нь харилцааны өгөгдлийн сангийн схемтэй төстэй боловч гүйцэтгэлд түр зуурын нөлөө үзүүлэхгүйгээр өөрчлөхөд хялбар байдаг. Бид blob хадгалах болон хамаарлын хадгалах сангаас хамгийн сайныг авсан.

Кассандра руу одоо байгаа мессежүүдийг импортлож эхэлмэгц бид 100 МБ-аас их хэмжээтэй хуваалтууд олдсон тухай анхааруулгыг бүртгэлээс шууд олж харлаа. Аан?! Эцсийн эцэст, Кассандра 2 ГБ хуваалтыг дэмждэг гэж мэдэгджээ!Боломж нь өөрөө үүнийг хийх ёстой гэсэн үг биш бололтой. Том хуваалтууд нь нягтруулж, кластерийг өргөжүүлэх гэх мэт Кассандра дахь хог цуглуулагч дээр их ачаалал өгдөг. Том хуваалттай байна гэдэг нь доторх өгөгдлийг кластерт түгээх боломжгүй гэсэн үг юм. Зарим Discord сувгууд олон жилийн турш оршин тогтнож, хэмжээ нь байнга нэмэгддэг тул бид ямар нэгэн байдлаар хуваалтын хэмжээг хязгаарлах шаардлагатай болох нь тодорхой болсон.

Бид мессежээ цаг хугацаанд нь блокоор (хувингаар) тараахаар шийдсэн. Бид Discord-ын хамгийн том сувгуудыг судалж үзээд, хэрэв бид мессежийг 10 орчим хоногийн блокоор хадгалвал 100 МБ-ын хязгаарт эвтэйхэн багтах болно гэдгийг тодорхойлсон. Блокуудыг message_id эсвэл цагийн тэмдэгээс авах ёстой.

DISCORD_EPOCH = 1420070400000 BUCKET_SIZE = 1000 * 60 * 60 * 24 * 10 def make_bucket(snowflake): хэрэв цасан ширхгүүд Байхгүй бол: timetamp = int(time.time() * 10000 SDISCORD_SIZE-г агуулна. DISCORD_EPOCH-ээс хойшхи # секундын тоо. timetamp = snowflake_id >> 22 return int(timestamp / BUCKET_SIZE) def make_buckets(start_id, end_id=None): буцах муж(make_bucket(эхлэх_id), make_bucket( end_id) + 1)
Кассандра хуваалтын түлхүүрүүд нь нийлмэл байж болох тул бидний шинэ үндсэн түлхүүр ((сувагийн_id, хувин), message_id) .

ХҮСНЭГТИЙН мессежүүдийг CREATE (channel_id bigint, bucket int, message_id bigint, author_id bigint, content text, PRIMARY KEY ((сувгийн_id, bucket), message_id)) КЛАСТЕРЛЭХ ЗАХИАЛГААР (message_id DESC);
Суваг доторх саяхны мессежийг асуухын тулд бид одоогийн цаг хугацаанаас channel_id хүртэлх олон тооны блокуудыг үүсгэсэн (энэ нь мөн Цасан ширхгийн адил он цагийн дарааллаар эрэмблэгдсэн бөгөөд эхний мессежээс хуучин байх ёстой). Дараа нь бид хангалттай мессеж цуглуулах хүртэл хуваалтуудыг дарааллаар нь асууна. арын талИйм арга нь хааяа идэвхтэй Discord тохиолдлуудад хангалттай мессеж цуглуулахын тулд олон янзын блокуудыг санал асуулга хийх шаардлагатай болдог. Практикт бүх зүйл эмх цэгцтэй байгаа нь тодорхой болсон, учир нь идэвхтэй Discord жишээний хувьд эхний хэсэгт ихэвчлэн хангалттай мессеж байдаг бөгөөд тэдгээрийн ихэнх нь байдаг.

Кассандра руу мессеж импортлох ажил хэвийн явагдаж, бид үүнийг үйлдвэрлэлд туршиж үзэхэд бэлэн болсон.

Хүнд хөөргөх

Гаралт шинэ системүйлдвэрлэл үргэлж аймшигтай байдаг тул хэрэглэгчдэд нөлөөлөхгүйгээр туршиж үзэх нь зүйтэй юм. Бид системийг MongoDB болон Cassandra дээр унших/бичих үйлдлийг хуулбарлахаар тохируулсан.

Эхлүүлсний дараа алдаа хянагч нь author_id нь тэг гэсэн алдааг харуулсан. Энэ нь яаж тэг байж болох вэ? Энэ бол шаардлагатай талбар юм!

Эцсийн эцэст тууштай байдал

Кассандра бол нэг төрлийн систем, өөрөөр хэлбэл хүртээмжтэй байхын тулд баталгаатай бүрэн бүтэн байдлыг золиослодог бөгөөд энэ нь бидний хүссэн зүйл юм. Кассандра бичихийн өмнө уншихыг хориглодог (унших үйлдлүүд илүү үнэтэй байдаг) тиймээс Кассандрагийн хийдэг бүх зүйл нь зөвхөн тодорхой багана өгсөн байсан ч шинэчлэлт, нэмэлт юм. Та мөн дурын зангилаа руу бичиж болох бөгөөд энэ нь багана тус бүрд "сүүлд бичсэн ялалт" семантик ашиглан зөрчилдөөнийг автоматаар шийдвэрлэх болно. Тэгэхээр энэ нь бидэнд хэрхэн нөлөөлөх вэ?


Уралдааны нөхцөлийн жишээ засварлах/устгах

Хэрэглэгч ижил нийтлэлийг устгаж байх үед өөр хэрэглэгч нийтлэлийг засварлаж байх үед Кассандра зөвхөн шинэчлэлт болон оруулгыг бүртгэдэг тул үндсэн түлхүүр болон текстээс бусад өгөгдөл бүрэн дутмаг мөр гарах болно. Энэ асуудлыг шийдэх хоёр боломжит шийдэл байдаг:

  1. Мессежийг засварлахдаа бүх мессежийг буцааж бичнэ үү. Дараа нь дахин амилах боломж бий устгасан мессежүүдболон бусад багана дахь зэрэгцээ оруулгуудын хувьд зөрчилдөх магадлалыг нэмдэг.
  2. Гэмтсэн мессежийг тодорхойлж мэдээллийн сангаас устгана уу.
Бид шаардлагатай баганыг (энэ тохиолдолд author_id) тодорхойлж, хоосон байвал нийтлэлийг устгах замаар хоёр дахь сонголтыг сонгосон.

Энэ асуудлыг шийдвэрлэх явцад бид бичих үйлдлүүд нь нэлээд үр ашиггүй байгааг анзаарсан. Кассандра эцсийн дүндээ тууштай байдаг тул өгөгдлийг шууд устгаж чадахгүй. Энэ нь устгах үйлдлийг бусад зангилаа руу давтах шаардлагатай бөгөөд зангилаа түр хугацаанд боломжгүй байсан ч үүнийг хийх ёстой. Кассандра үүнийг устгалтыг "булшны чулуу" гэж нэрлэгддэг бичлэгийн өвөрмөц хэлбэртэй адилтган зохицуулдаг. Унших ажиллагааны явцад замд тааралдсан "булшны чулуу"-г зүгээр л алгасдаг. "Булшны чулуу" -ын ашиглалтын хугацааг тохируулах боломжтой (анхдагчаар 10 хоног), хэрэв хугацаа нь дууссан бол суурийг нягтруулах явцад бүрмөсөн арилгадаг.

Багана устгах, баганад тэг бичих нь яг ижил зүйл юм. Аль ч тохиолдолд "оршны чулуу" үүсдэг. Кассандра дээрх бүх бичвэрүүд нь шинэчлэлт, оруулга байдаг тул та эхлээд тэг гэж бичсэн ч булшны чулуу үүсгэдэг. Практикт бидний мессежийн бүрэн загвар нь 16 баганаас бүрдэх боловч дундаж мессеж нь зөвхөн 4 утгыг тохируулсан байв. Бид Кассандра дахь 12 булшны чулууг ихэвчлэн ямар ч шалтгаангүйгээр тэмдэглэсэн. Асуудлын шийдэл нь энгийн байсан: мэдээллийн санд зөвхөн тэгээс өөр утгыг бичих.

Гүйцэтгэл

Кассандра уншихаасаа илүү хурдан бичих чадвартай гэдгээрээ алдартай бөгөөд энэ нь бидний ажигласан зүйл юм. Бичих үйлдлүүд нэг миллисекундээс бага хугацаанд, унших үйлдлүүд 5 миллисекундээс бага хугацаанд явагдана. Эдгээр хувь хэмжээ нь хандсан мэдээллийн төрлөөс үл хамааран ажиглагдсан. Туршилтын долоо хоногийн турш гүйцэтгэл өөрчлөгдөөгүй байна. Гайхах зүйл алга, бид яг хүлээж байсан зүйлээ авсан.


Бүртгэлийн өгөгдлийн дагуу унших / бичих саатал

Хурдан, найдвартай уншигдах гүйцэтгэлийн хувьд сая сая мессеж бүхий сувагт нэг жилийн настай мессеж рүү шилжих жишээ энд байна:

том сюрприз

Бүх зүйл хэвийн болсон тул бид Кассандра-г үндсэн мэдээллийн сан болгож, MongoDB-г долоо хоногийн дотор үйлчилгээнээс хассан. Тэрээр нэг өдөр хариу өгөхөө болих хүртлээ 6 сар орчмын турш өө сэвгүй ажилласаар байв.

Бид Кассандра хог цуглуулах явцад 10 секундын турш зогсолтгүй зогсдогийг анзаарсан ч яагаад гэдгийг нь сайн олж чадаагүй. Бид ухаж эхэлсэн бөгөөд ачаалахад 20 секунд зарцуулсан Discord сувгийг олсон. Буруутан нь Puzzles & Dragons дэд мэдээллийн нийтийн Discord сервер байсан. Олон нийтэд нээлттэй болохоор бид нэгдлээ. Бидний гайхшруулсан зүйл бол суваг дээр ганцхан мессеж байсан. Тэр үед тэд манай API-уудаар дамжуулан сая сая мессежийг устгаж, нэг сувагт зөвхөн нэг мессеж үлдээсэн нь тодорхой болсон.

Хэрэв та анхааралтай уншиж байгаа бол Кассандра "булшны чулуу" ("Эцсийн тууштай байдал" бүлэгт дурдсан) ашиглан устгалыг хэрхэн зохицуулдагийг санаарай. Хэрэглэгч энэ сувгийг ачаалах үед зөвхөн нэг мессеж байгаа ч Кассандра сая сая булшны чулууг үр дүнтэй сканнердах шаардлагатай болдог. Дараа нь энэ нь JVM цуглуулахаас илүү хурдан хог үүсгэдэг.

Бид энэ асуудлыг дараах байдлаар шийдсэн.

  • Бид орой бүр мессежийн кластер дээрээ Кассандра засварыг (энтропийн эсрэг үйл явц) явуулдаг тул булшны чулуунуудын ашиглалтын хугацааг 10 хоногоос 2 хоног болгон бууруулсан.
  • Суваг дахь хоосон блокуудыг хянаж, ирээдүйд зайлсхийхийн тулд хүсэлтийн кодыг өөрчилсөн. Энэ нь хэрэв хэрэглэгч энэ хүсэлтийг дахин эхлүүлбэл хамгийн муу тохиолдолд Кассандра зөвхөн хамгийн сүүлийн блокийг сканнердах болно гэсэн үг юм.

Ирээдүй

IN Энэ мөчБид 12 зангилааны кластертай бөгөөд 3-ын реп фактортой ажиллаж байгаа бөгөөд шаардлагатай бол илүү олон Кассандра зангилаа нэмсээр байх болно. Бид энэ арга барилыг урт хугацаанд үр дүнтэй гэж үзэж байгаа ч Discord хөгжихийн хэрээр бид өдөрт хэдэн тэрбум мессежийг хадгалах ёстой алс ирээдүй мэт харагдаж байна. Netflix болон Apple нь олон зуун зангилаа бүхий кластер ажиллуулдаг тул одоогоор бидэнд санаа зовох зүйл алга. Гэсэн хэдий ч би хоёр санаагаа нөөцөлж авахыг хүсч байна.

Ойрын ирээдүй

  • Манай мессежийн кластерийг Кассандра 2-оос Кассандра 3 болгон шинэчилнэ үү. Cassandra 3-ын шинэ хадгалах формат нь хадгалах санг 50%-иар бууруулж чадна.
  • Кассандрагийн шинэ хувилбарууд нь зангилаа тус бүрт илүү их мэдээлэлтэй ажиллахад илүү дээр юм. Одоогоор бид тус бүрдээ ойролцоогоор 1 TB шахагдсан өгөгдлийг хадгалдаг. Энэ хязгаарыг 2 TB болгон нэмэгдүүлэх замаар кластер дахь зангилааны тоог багасгах нь аюулгүй гэж бид бодож байна.

алс ирээдүй

  • Learn Scylla бол C++ хэл дээр бичигдсэн Кассандра-тай нийцтэй DBMS юм. IN хэвийн үйл ажиллагааМанай Кассандра зангилаа нь үнэндээ бага зэрэг CPU зарцуулдаг боловч Кассандра засварын үед (энтропийн эсрэг үйл явц) ачаалал багатай үед CPU-ээс ихээхэн хамааралтай байдаг бөгөөд сүүлийн засвараас хойш бичигдсэн өгөгдлийн хэмжээнээс хамаарч засварын хугацаа нэмэгддэг. Скилла засварын хурдыг ихээхэн нэмэгдүүлэхээ амлаж байна.
  • Ашиглагдаагүй мэдээллийг Google Cloud Storage-д архивлаж, хүсэлтээр буцааж байршуулах системийг бий болго. Бид үүнээс зайлсхийхийг хүсч байгаа бөгөөд бид үүнийг хийх шаардлагагүй гэж боддог.

Дүгнэлт

Кассандра руу шилжсэнээс хойш жил гаруйн хугацаа өнгөрсөн ч гэсэн "том сюрприз"энэ бол тайван усанд сэлэх явдал байв. Бид гүйцэтгэл, тогтвортой байдлыг хадгалахын зэрэгцээ өдөрт 100 сая гаруй мессеж илгээж байсан бол 120 сая гаруй мессеж болж чадсан.

Энэхүү төсөл амжилттай хэрэгжсэний үр дүнд бид үйлдвэрлэлийн бусад бүх мэдээллээ Кассандра руу шилжүүлж, амжилттай болсон.

Энэ нийтлэлийн үргэлжлэлд бид олон тэрбум мессеж дээр бүрэн текст хайлтыг хэрхэн хийдэг талаар судлах болно.

Бидэнд DevOps-ийн тусгай инженерүүд (зөвхөн дөрвөн арын инженер) байхгүй хэвээр байгаа тул санаа зовох зүйлгүй системтэй байх нь үнэхээр гайхалтай юм. Бид ажилд авч байгаа тул эдгээр оньсого танд таалагдаж байвал холбогдоорой.

Шошго: шошго нэмэх

Ихэнхдээ текст чат хэрэглэгчид хамааралтай байдлаа алдаж, нэмэлт зай эзэлдэг тул хуучин бүх захидал харилцааг устгахыг хүсдэг. Үүний зэрэгцээ програм хангамжийн интерфейсээр дамжуулан үүнийг хийх оролдлого нь үүнийг зөвшөөрдөггүй. Ийм нөхцөлд яаж байх вэ, цэвэрлэгээ хийх боломжтой юу?

Чатын тухай ойлголт

Discord дахь чат нь бие даасан сувгуудыг хэлдэг. Тэд эргээд ашигласан харилцааны аргын төрлөөс хамааран дуу хоолой, текст гэж хуваагддаг.

гэх мэт суурь элемент Discord дахь ажил нь хэрэглэгчийн үүсгэсэн сервер юм. Үүний дараа аль хэдийн хоёр төрлийн хязгааргүй тооны суваг үүсгэх чадвартай болсон.

Discord дахь чатыг устгаж байна

Уг програм нь хэрэглэгчдэд сувагт хуримтлагдсан бүх мессежийг шууд устгах хэрэгслээр хангадаггүй гэдгийг шууд хэлэх ёстой. Устгах нь зөвхөн бие даасан бүртгэлд (мессеж) боломжтой. Гэсэн хэдий ч цэвэрлэх үйл явцыг хурдасгах нэг арга бий. Бид "хариу үйлдэл" гэсэн нэр томъёоны тухай ярьж байна, өөрөөр хэлбэл харилцан ярианд оролцогчдын илгээсэн мессежүүдэд хариу үйлдэл үзүүлэх.

Чатад байгаа бүх хариу үйлдлийг устгахын тулд дараах процедурыг өгсөн болно.

  • Discord програм руу нэвтрэх;
  • Сонирхсон сувгаа сонгох;
  • Сонгосон мессежийн баруун талд байгаа "хоёр цэг" дүрс дээр дарна уу;
  • Унждаг цэснээс "Бүх хариу үйлдлийг арилгах" гэснийг сонгоно уу.

Мэдээжийн хэрэг, ийм байдлаар бүх мессежийг нэг товшилтоор цэвэрлэх боломжгүй, гэхдээ энэ нь гүйцэтгэхэд шаардагдах хугацааг эрс багасгах болно. бүрэн цэвэрлэгээ. Зурвасуудыг нэг нэгээр нь гараар устгах шаардлагатай болно.

Үүнд:

  • Програмд ​​нэвтрэх;
  • Сонирхсон сувгаа сонгох;
  • Мессеж бүрийн эсрэг талд "хоёр цэг" дүрс дээр дарна уу;
  • Унждаг цэснээс "Устгах" сонголтыг сонгоно уу.

Та мөн мессежийн текстийг баруун товчлуураар тодруулж, "Устгах" гэсэн сонголт дээр дарж устгаж болно.

Сувгийн хэрэгцээ алга болсон тохиолдолд үүнийг зүгээр л устгаж болох бөгөөд үүнд хэдхэн товчлуур дарах шаардлагатай болно. Энэ нь дараах багц алхмуудыг шаарддаг.

  • Програм руу нэвтрэх;
  • Сонирхсон сувгаа сонгох;
  • "Цэс" хэсэгт очих эсвэл хулганы баруун товчийг дарна уу;
  • Санал болгож буй үйлдлийн жагсаалтаас "Сувгийг устгах" сонголтыг сонгоно уу.

Тиймээс суваг өөрөө болон доторх бичлэгүүдийг устгах боломжтой. Сүүлийн процедур нь тодорхой хугацааны алдагдал шаарддаг.

Хөтөлбөрийн тухай

Discord хөтөлбөр нь зохион байгуулахад зориулагдсан дуут холбоо онлайн тоглоомын тоглогчид. Мэдээжийн хэрэг, энэ үйлчилгээ нь стандарт текст харилцааны боломжуудыг санал болгодог боловч түвшний хувьд үүнийг хүлээн зөвшөөрөх ёстой функциональ байдалПрограмын текст сувгууд нь мессенжерээс доогуур байдаг. Discord төсөл нь үндсэндээ тоглоомын үзэгчдэд зориулагдсан гэдгийг хүлээн зөвшөөрөх ёстой.

Өөрийн Discord серверийг үүсгэсний дараа олон эхлэгчдэд серверийн удирдлагын талаар янз бүрийн асуулт гарч ирж магадгүй юм. Эдгээр асуултуудын нэг нь "Discord дахь бүх мессежийг хэрхэн устгах вэ?" байж болно. Энэ асуултыг олон шалтгааны улмаас асууж болно: нэг шаардлагагүй мессежийг устгахаас эхлээд мэдээллийн санг бүхэлд нь бусдын нүднээс цэвэрлэх хүртэл.

Discord дээрх харилцан яриаг устгана уу

Харамсалтай нь хөгжүүлэгчид Discord дээрх бүх мессежийг нэг дор хэрхэн устгах талаар заагаагүй байна. Гэхдээ битгий бухимдаарай! Энэ хоригийг хэсэгчлэн тойрч гарах олон арга бий.

Арга 1: Харилцан яриаг нэг мессежээр устгана уу

Энэ арга нь зөвхөн захидал харилцааг хэсэгчлэн устгах шаардлагатай тохиолдолд л тохиромжтой. Том хэмжээний цэвэрлэгээний сонголтын хувьд энэ арга нь хамгийн муу арга юм, учир нь энэ нь олон удаа давтагдах үйлдлүүдийн зардлыг шаарддаг.


Арга 2: Discord дээрх бүх мессежийг чатыг устгаснаар устгана уу

-тай захидал харилцааг устгах энэ арганэлээд хурдан хийж болно. Цорын ганц сөрөг зүйл бол та сувгаа дахин үүсгэж, тохиргоогоо хийх хэрэгтэй болно. Гол давуу тал нь сонгосон суваг дээр хадгалагдсан Discord дээрх бүх мессежийг устгах боломжийг танд олгоно.


Discord нь групп эсвэл чат гэх мэт ойлголтыг албан ёсоор хүлээн зөвшөөрдөггүй гэдгийг санаарай. Тэдгээрийг ихэвчлэн бүлгийн харилцаа холбоо тогтоох газар гэж ойлгодог. Зөвхөн Discord-д ийм газруудыг арай өөрөөр нэрлэдэг - суваг. Энэ тохиолдолд сувгууд нь текст болон дуут гэсэн хоёр төрлийн байж болно. Олон хүмүүс Discord-ийг илүүд үздэг, учир нь энэ нь оролцогчид дуут сувгийг орхихгүйгээр хэд хэдэн текст сувгаар нэгэн зэрэг харилцах боломжийг олгодог.

Арга 3: Reactions ашиглан Discord харилцан яриаг устгах

Discord дээрх бүх мессежийг хариу үйлдэл ашиглан устгах боломжгүй бөгөөд тэдгээр нь дангаараа зарим процессыг удирдахад тусалдаг.

Жишээлбэл, есөн хариултаас бүрдэх Discord серверт санал асуулга нэмэх боломжийг олгодог ашигтай бот байдаг. Урвалын тусламжтайгаар та ямар хариултын сонголт сонгогдсоныг харж болно Хэрэглэгчийн тодорхойлсонмөн тэдгээрийг арилгах. Эхэндээ хариу үйлдэл нь эможи эмотиконд зориулагдсан байв.


Арга 4: Сүүлийн долоо хоногийн мессежүүдийг устгана уу

Бага зэрэг байх газар бас бий радикал аргамессежийг цэвэрлэх зориулалттай. Гэсэн хэдий ч энэ нь танд сүүлийн 7 хоногийн Discord дээрх бүх мессежийг устгах боломжийг олгоно.

Энэ арга нь чатыг бүхэлд нь биш харин тухайн хэрэглэгчийн мессежийг устгах шаардлагатай тохиолдолд л тохиромжтой гэдгийг тэмдэглэх нь зүйтэй.


Эцэст нь, хориглосон хэрэглэгч серверээс хаагдах болно, өөрөөр хэлбэл, зохиогч эсвэл администраторын эрх бүхий гишүүн тэднийг блокоос гаргах хүртэл тэд нөөцийн урилга холбоосыг ашиглах боломжгүй болно. Хүний хоригийг хэрхэн цуцлах талаар дараахь зүйлийг тайлбарласан болно.

Арга 5: Mee6 Bot

Хэдийгээр Discord нь бүх мессежийг устгахыг зөвшөөрдөггүй ч нэг дор 100 хүртэлх мессежийг устгах арга байдаг. Үүнийг хийхийн тулд та нэмэлт Mee6 bot суулгах хэрэгтэй. Энэ нь захидал харилцааг устгах боломжийг олгодог хамгийн хялбар бөгөөд хурдан арга гэдгийг хүлээн зөвшөөрөх нь зүйтэй.

Нэг ёсондоо Mee6 бол хөгжмийн робот боловч хэд хэдэн ашигтай шинж чанартай байдаг.

  1. Эхний алхам бол роботыг сервертээ нэмэх явдал юм. Энэ холбоосыг дагана уу.
  2. "Командыг ажиллуулах" Discord-д нэмнэ үү».
  3. Mee6 ботыг зөвшөөрөх.
  4. Дараа нь та Mee6 давамгайлах серверийг сонгох хэрэгтэй.
  5. Дараагийн цонхонд та нэмсэн ботод ашиглах эрхийг тохируулж болно.
  6. "Зөвшөөрөх" дээр дарсны дараа та робот биш гэдгээ баталгаажуулна уу.
  7. Ботыг серверт нэмсний дараа ботын тохиргоо болон параметрүүдийг тохируулах цонх нээгдэнэ. Жишээлбэл, хэд хэдэн нэмэлт өргөтгөлүүдийг оруулсан болно. Тэдний нэг нь тусламж юм.
  8. Өөрчлөлтүүд хүчин төгөлдөр болохын тулд хайрцгийг чагтлаад " дээр дарна уу. шинэчлэх", өөрөөр хэлбэл. шинэчлэх.
  9. Командын ажиллагааг шалгахын тулд аль ч чатаар сервер дээр тусламж илгээнэ үү.
  10. Үүний дараа залгаасуудын янз бүрийн цэгүүдийн тайлбар нь роботоос ирсэн хувийн мессежээр ирэх ёстой.
  11. Бичлэгүүдийг устгах командуудын багц нь "Модератор" залгаасыг агуулж болох нь Mee6-ийн туслах нийтлэлээс тодорхой болно. Ботын тохиргоог засварлах цонхонд "Модератор" хэсгийн хажууд "Идэвхгүй" гэсэн гарчигтай улбар шар зууван дээр дарна уу.
  12. Plugin нэмэхээ баталгаажуулна уу.
  13. Clear командыг оруулсныг тэмдэглэж, өөрчлөлтийг "Шинэчлэх" үйлдлээр хадгална уу. !clear xx команд нь нэг удаад 100 хүртэлх мессежийг устгах боломжийг олгодог бөгөөд үүнд xx-ийн оронд устгах мессежийн тоог нэмэх шаардлагатай.
  14. !clear 50 командыг ашиглан мессеж илгээнэ үү.
  15. Сүүлийн 50 мессеж чатаас устана гэсэн үг. Устгасан мессежүүдийн тоолол нь захидал харилцааны төгсгөлөөс эхэлдэг, өөрөөр хэлбэл эхлээд шинэ мессежүүд, дараа нь хуучин мессежүүд устгагдана.

Интерфэйсээр дамжуулан захидал харилцааг устгах боломжийг олгодог үйлдлийн алгоритм гар утас, гүйцэтгэсэн үйлдлүүдтэй бүрэн төстэй. Тийм учраас бид тэдгээрийг дүрслэн харуулахгүй.

Discord нь интернетийн бүх тоглоомчдын уулзах газар болжээ. Та ямар ч тоглоом тоглосон бай, Discord-д үүнд зориулсан нийгэмлэг байдаг. Дэлхий даяар энэ програмыг ашигладаг тоглогчдын тоог харгалзан үзвэл Discord роботууд улам бүр түгээмэл болж байгаа нь гайхах зүйл биш юм.

Хувийн серверүүд найзуудтайгаа тоглохын тулд роботуудыг ашигладаг бол нийтийн серверүүд хэрэглэгчдийг зохицуулах зорилгоор ашиглаж болно. Бүрэн ажиллагаатай хөгжмийн роботуудыг хоёр төрлийн серверт ашиглах боломжтой тул тоглогчид тоглож байхдаа хөгжим сонсох боломжтой. Ийм олон хүнтэй янз бүрийн төрөлроботууд, танд тохирохыг нь олоход хэцүү байж магадгүй. Өнөөдөр бид хамгийн алдартай ботуудын талаар ярихыг хүсч байгаа бөгөөд энэ мэдээлэл танд энэ эсвэл тэр ботыг сувагтаа нэмэх эсэхээ шийдэхэд тусална гэж найдаж байна.

Хөгжмийн роботууд

Ямар ч сервер хөгжмийн робот ашиглаж болно. Үнэн хэрэгтээ хөгжмийн роботууд маш их алдартай тул Discord bots хуудсан дээр тэдэнд зориулсан бүхэл бүтэн хэсэг байдаг. Маш олон хөгжмийн роботууд байдаг ч хамгийн шилдэг хоёр нь Эрисбот болон Хуушуур юм.

Erisbot нь зөн совинтой бөгөөд хэрэглэхэд хялбар юм. Програм нь дараах байдлаар ажилладаг хөгжим тоглуулагч, мөн iPod-той төстэй олон функцуудыг агуулсан. Та програмыг бие даан ашиглаж болно. Нэмж дурдахад, энэ нь хөгжилтэй зургууд, хотын хар ярианы толь бичгийн хайлттай.

Хуушуурын бялуу нь арай өөр бөгөөд зөвхөн цөөн хэдэн функцийг санал болгодог. Энэ нь бага тохиргоо, сонголттой ч гэсэн ErisBot-тэй төстэй хөгжмийн робот шиг ажилладаг. Гэсэн хэдий ч энэ нь зарим зураг, тоглоом, зохицуулалтын сонголтуудтай. Энэ нь бүх зүйлийг бага зэрэг хийдэг бөгөөд хэрэв та нэг функцээр баялаг ботыг хүсч байгаа бөгөөд олон өөр функцийг нэмэхийг хүсэхгүй байгаа бол ашиглахад тохиромжтой хэрэгсэл юм.

Зохицуулагч роботууд

Хуушуураас гадна олон зохицуулагч роботууд байдаг. Олон нийтийн Discord серверийг удирдахад, ялангуяа чатын хэл, агуулгыг эмх цэгцтэй байлгахыг хүсвэл автоматаар зохицуулах нь маш хэрэгтэй.

Хуушуурын нэгэн адил Dyno бол онцлог шинж чанартай бот юм. Хуушуурын нэгэн адил хөгжим тоглож чаддаг ч гол үүрэг нь зохицуулалт юм. Ихэнх роботуудаас ялгаатай нь Dyno нь автоматаар зохицуулагч, мэндчилгээний мессежтэй тул модераторууд чатанд байнга байх шаардлагагүйгээр сувгийг бүхэлд нь удирдах боломжтой.

Dyno бол олон функцээр баялаг бот боловч Auttaja нь бараг зөвхөн зохицуулалт хийхэд зориулагдсан. Үүний зэрэгцээ Ауттажагийн боломж асар их юм. Бот нь чатыг автоматаар зохицуулахаас гадна хэрэглэгчийн нэр, шийтгэл гэх мэт системчилсэн үйл явцыг зохицуулах боломжтой.

Тоглоом / зугаа цэнгэлийн роботууд

Хамгийн алдартай роботуудын зарим нь интерактив тоглоом эсвэл зугаа цэнгэлийн роботууд юм. Энэ ангилалд хамгийн алдартай хоёр робот бол Pokecord болон Dank Memer юм.

Pokecord бол таны сувагт Pokemon текстийн адал явдлыг үүсгэдэг хөөрхөн интерактив тоглоом юм. Энэ нь Discord-ын гишүүдээ тоглоомд татан оролцуулах хөгжилтэй бөгөөд хялбар арга юм.

Энэ бол зөвхөн таны оюун ухаанд зугаацах боломжийг олгодог тэнэг робот юм. Энэ нь танд дурсамж үүсгэх, хуваалцах боломжийг олгодог бөгөөд функциональ байдлаараа бусад хөгжилтэй байдаг. Гэсэн хэдий ч энэ нь үндсэндээ алдартай онлайн зургуудаас меме үүсгэх зорилготой юм.

Зөв роботыг олж чадахгүй байна - өөрөө үүсгээрэй!

Тус бүр өөрийн гэсэн өвөрмөц тохиргоотой, өргөн хүрээний командтай хэдэн зуун Discord роботууд байдаг ч та өөрийн хэрэгцээнд тохирсон нэгийг олохгүй байж магадгүй юм. Эсвэл та зүгээр л авахыг хүсч байгаа байх бүрэн тохируулгаболон түүнээс дээш хязгаарлагдмал хандалтбот руу. Ямар ч тохиолдолд өөрийн робот хийх хэд хэдэн арга байдаг боловч бид хамгийн энгийн бөгөөд үр дүнтэй арга дээр анхаарлаа хандуулах болно.

Таны хийх ёстой хамгийн эхний зүйл бол Discord руу нэвтэрч, програмын хуудас руу очоод "Програм үүсгэх" дээр дарна уу.

Дараа нь програмын нэрийг (хүсвэл аватар) нэмээд зүүн талын самбар дээрх "Bot" дээр дарна уу. Үүнтэй ижил газар "Бот нэмэх" ("Бот нэмэх") дээр дарна уу. Дараа нь та үргэлжлүүлэхийг хүсэж байгаа эсэхийг асуух цонх гарч ирэх бөгөөд "Тийм" дээр дарна уу.

Эндээс та өөрийн эрх мэдлээ тодорхойлж болно. Үүнийг таны сонголтын дагуу тохируулж болно. Ботын хэрэглэгчийн нэрийн дор "Токен" гэсэн хэсэг гарч ирэх ёстой. Үүний доор "Токен илчлэхийн тулд товшино уу" холбоос дээр дарна уу. Токен кодыг хуулна уу, танд дараа хэрэгтэй болно

Дараа нь зүүн талд байгаа "OAuth2" дээр дарна уу. Энд та ямар програм үүсгэж байгаагаа зааж өгөх ёстой. "Bot" дээр товшоод гарч ирэх URL-г хуулна. Таныг удирдаж буй серверүүддээ робот нэмэх боломжтой хуудас руу аваачна. Дараа нь робот нэмэх серверээ сонгоно уу.

Энд танд ботыг бүрэн ашиглахын тулд ямар нэгэн кодчиллын програм, зарим мэдлэг хэрэгтэй болно. Ботыг идэвхжүүлэхийн тулд танд хэрэгтэй болно текст засварлагч NotePad гэх мэт , JavaScript гэх мэт кодлох хэрэгсэл. Та өмнө нь авсан токеноо авч, өөрийн роботын хавтсанд NotePad баримт болгон хадгалах хэрэгтэй болно. Энэ баримт бичиг нь "auth.json" нэртэй байх ба дараах байдлаар бичигдсэн байх ёстой.

токен:

Та роботоо ажиллуулахын тулд өөр хоёр файл үүсгэх хэрэгтэй болно. Нэгийг нь дараах кодоор package.json гэж хадгалах ёстой.

"нэр": "мэндлэх-бот",

"хувилбар": "1.0.0",

"тайлбар": "",

"гол": "bot.js",

"зохиогч": "",

хамаарал: ()

Сүүлийн кодын хувьд файл үүсгээд "bot.js" гэж нэрлэнэ үү. Энд та bot-ын үндсэн функцуудыг нарийвчлан тайлбарлах хэрэгтэй. Хэрэв танд код бичих тодорхой мэдлэг, ур чадвар байгаа бол өөрт хэрэгтэй функц бүхий робот үүсгэх боломжтой. Гэсэн хэдий ч Medium сайт нь энгийн Discord робот кодоор хангадаг. Тиймээс, хэрэв та JavaScript-ийн талаар сайн мэдэхгүй бол дараах кодыг ашиглан энгийн багц функц бүхий робот үүсгэж болно.

var Discord = шаардлагатай('discord.io'); var logger = шаардлагатай('winston'); var auth = шаардах('./auth.json'); // Бүртгэлийн тохиргоог тохируулах logger.remove(logger.transports.Console); logger.add(logger.transports.Console, ( өнгө: үнэн )); logger.level = 'дибаг'; // Initialize Discord Bot var bot = new Discord.Client(( токен: auth.token, autorun: үнэн )); bot.on('бэлэн', функц (evt) ( logger.info('Холбогдсон'); logger.info('Нэвтэрсэн: '); logger.info(bot.username + ' - (' + bot.id + ')'); ))) bot.on('message', function (хэрэглэгч, userID, channelID, message, evt) ( // Манай бот командыг гүйцэтгэх эсэхээ мэдэх шаардлагатай // Энэ нь `!`-ээр эхлэх мессежийг сонсох болно, хэрэв () message.substring(0, 1) == '!') ( var args = message.substring(1).split(' '); var cmd = args;

args = args.splice(1); switch(cmd) ( // !ping case 'ping': bot.sendMessage(( to: channelID, message: 'Pong!' )); break; // Хэрэв та хүсэж байгаа бол зүгээр л ямар ч case командыг нэмнэ үү.. ) ) ) );

Эцэст нь та JavaScript-г (эсвэл өөр өөрийн сонгосон кодчилолын программ) нээж, "npm install discord.io winston --save" гэж бичснээр энэ кодыг ажиллуулж болно. Энэ нь роботыг ажиллуулахад шаардлагатай бүх програмыг суулгах болно. Дараа нь ботыг ажиллуулах бүртээ "node bot.js" гэж бичнэ үү.

Энэ процесс нь зарим кодчиллын мэдлэг шаарддаг бөгөөд аль хэдийн үүсгэгдсэн хэдэн зуун роботууд байдаг тул та өөрөө үүсгэхээсээ өмнө тэдгээрийг анхаарч үзэх хэрэгтэй. Мэдээжийн хэрэг, танд хэрэгтэй зүйлээ хийж чадах олон тооны роботууд байгаа үед та шууд өөрийн гараар бүтээхийг хүсч магадгүй юм.



Ачааж байна...
Топ