rant bot to detect abusive words on several social media that use bots
Tech Info :
-
RabbitMQ: Messaging yang cocok untuk komunikasi ke api model server dan aplikasi Bot lain -
argon: algoritma hashing password -
class-validator: validasi pada DTO -
@fastify/session: untuk session , jadi project ini mengguankan session tampa perlu redis , kecuali nantik jika sudah gedekdi sini tidak menggunkana
@secure-sessionkarena tidak cocok dengan flash message -
@fastify/cookie: karena ada session pastinya ada cookies@fastify/flash: tidak stabil di fastifyWalaupun mengguankan flash , tapi gunakan json return untuk informasi yang lebih interaktif , flash message cukup saat pertama di kirim aja
-
Tailwindcss: menggunakan Tailwincss CLI yang auto build running server + client ( tailwindcss)# running tailwindcss untuk generate code pnpm run client -
fontawesome: font di project ini cek di web aslinya : font icon -
session+cokiess+guard: 2agar keamana di setiap view nantik
Redis: saat aplikais besar nantik dan karena mengguankan Session maka sesi login pengguna akan di simpan dan di tangani oleh RedisSpeech-to-Text (STT): ini untuk kasus**Audio**jadi kita ubah ke text dahulu baru di handle oleh model nantinyaini sulit dan lama , butuh trining model terpisah agar akurasi untuk bahasa daerah cocok
bot discord: https://github.com/bgdar/bot-discord/tree/rantbot-telegram: https://github.com/bgdar/bot-telegram/tree/rantbot-whatsApp( coming soon ):
ada 2 jenis katori user User user biasa yang masuk ke grub atau berinteraksi dengan bot app user akan punya akun yang terkoneksi ke bot
role( daftar keadaan suatu user ) :
- Normal (Normal)-> Toxic 0% - 20%: Pengguna berkomunikasi secara wajar, sopan, dan kooperatif.
- Suspicious (Mencurigakan) -> Toxic 21% - 40%: Mulai menggunakan sarkasme atau sindiran tipis yang berpotensi memancing emosi pengguna lain.
- Dangerous (Berbahaya) -> Toxic 41% - 60%: Frekuensi penggunaan kata-kata kasar atau provokasi mulai meningkat dan mengganggu kenyamanan.
- Extreme (Sangat Beracun) -> Toxic 61% - 100%: Pelanggaran berat seperti flaming, penghinaan, atau harassment (pelecehan) secara terang-terangan.
Supervisor pendamping atau admin yang mengelola grub
Karena menggunakan session maka pilih Id supervisor dengan id user itu 'BERBEDA'
Forumis: Sebutan resmi untuk orang yang aktif berpartisipasi atau menjadi bagian dari suatu forum.
-
forums hanya bisa di buat oleh supervisor maka harus login ulang jika user login ,
idenya saat login cek apakah sudah ada akun supervisor yang sama , jika ada maka supervisor juga login
-
role(status supervisor) :untuk bebera role
coming soon
- Trainee (Siswa / Magang): Pengawas pemula yang hanya bisa memantau dan melaporkan pelanggaran dasar tanpa hak eksekusi langsung.
- Teacher (Guru / Moderator) : Pengawas operasional yang berhak menegur, memberi peringatan, dan meredam situasi konflik ringan.
- Manager (Manajer / Pengawas) : Pengawas senior yang memiliki wewenang untuk membekukan akun sementara dan mengedit konten yang melanggar.
- Director (Direktur / Kepala): Pengawas tingkat tinggi yang mengambil keputusan strategis dan menangani kasus pelanggaran berat.
- CEO (Bos Besar / Pemilik): Pengawas tertinggi dengan kendali penuh atas sistem, kebijakan, serta otoritas mutlak untuk blokir permanen.
-
Forums: Tempat atau wadah (kamar) diskusi besar yang berisi informasi grup, status akses, dan statistik obrolan komunitas.
-
Group: Koleksi data pesan/chat yang dikirim oleh anggota di dalam suatu Forums tertentu (dilengkapi fitur pelacakan baca banyak orang).
-
Chat: Koleksi data pesan/chat personal (1-on-1) antar-user yang terisolasi di dalam ruangan unik (roomId) tanpa terikat dengan forum mana pun.
handle Sosmed
sosmed.controller: handle untuk Api sosmed di sini , baik login , berpindah halaman dan lainya
Kemampuan monggoDB
- NoSQL dirancang untuk menangani operasi tulis (write) skala besar dengan latensi sangat rendah jadi cocok utnuk chating
- MongoDB menggunakan memori internal komputer (RAM caching) secara optimal untuk mempercepat proses penyimpanan pesan baru dan penarikan riwayat chat lama. Hal ini membuat pengalaman pengguna saat melakukan scrolling riwayat chat terasa sangat instan
Kekurangan MongoDB - database ini kurang optimal jika digunakan untuk mengelola data relasional yang sangat kompleks dengan banyak operasi JOIN, seperti sistem transaksi keuangan atau manajemen inventaris yang rumit.
Dataset Column info
| Column | Arti | Penjelasan |
|---|---|---|
text |
Teks komentar | Isi kalimat atau komentar yang dianalisis oleh model NLP |
toxic |
Beracun / Toxic | Menandakan komentar mengandung unsur negatif, kasar, ofensif, atau tidak sopan |
severe_toxic |
Sangat toxic | Toxic tingkat berat, biasanya lebih agresif, ekstrem, atau sangat kasar |
obscene |
Kata cabul / vulgar | Mengandung kata-kata kotor, porno, atau vulgar |
threat |
Ancaman | Mengandung ancaman kepada seseorang |
insult |
Penghinaan | Menghina, merendahkan, atau menyerang seseorang |
identity_hate |
Kebencian identitas | Ujaran kebencian terhadap identitas tertentu seperti ras, agama, suku, gender, dll |
ada di branch :Model server
- di sini model AI untuk prediksi di jalakna dan juga handle response untuk menghasilkan response text untuk Bots gunakan
- di sini iniasialisais pertama RabbitMQ untuk membuat daftar queue - queue yang di perlukna untuk komunikasi aplikasi
RabbitMQ file ada fi module
rant
untuk masuk ke web RabbitMQ
- Default port and port now :
5672 - masuk ke url : http://localhost:15672
- default password :
guest, username :guest
queue :
-
queue-telegram : untuk mengirim data metah ke queue dan masuk ke Model Server Api
-
queue-telegram-response : hasil yang di kembalikan oleh Model Server Api dengan response text
-
queue-discord
-
queue-discord-response
-
queue-dashboard
-
queue-dashboard-response
-
queue-user : berisi data user yang akan di gunakan di setiap apliakasi , ada ID untuk memastikan user login ke setiap aplikasi
data user
{
username : "bisa saja berubah di setiap aplikasi sosmed ( cari tahu cara menghadle nya)",
discord_id : "121212121",
telegram_id : "1212121212",
akun : "user || supervisor"
role : "user role atau supervisor role"
}
data ( payload ) yang masuk ke server yang menjalakan model dan response nya
- data di queue dengan nama
queue-<media social>: data yang media sosial kirim ke rabbitmq - field katagori di gunakan untuk spesifikasi response chat , tergantung bagaimaan response chat di tulis ulang
contoh:
grub,chat,
{
"chat_id": ,
"katagori" : ""
"text": ,
"plafrom": "telegra, || discord || dashboard"
}- data di queue dengan nama
queue-<media social>-response: data yang di kriim dari rabbitmq - field katagori di gunakan untuk spesifikasi response chat , tergantung bagaimaan response chat di tulis ulang
contoh:
grub,chat,
{
"chat_id": ,
"response": string,
"katagori" : ""
is_toxic : boolean
"plafrom": string
}ini data memang harus selau di kirim sih untuk di cek di server model nya
docker compose :
mongodb: database utamamonggodb-express: antarmuka adminitratif berbasis webakses di web : localhost =
http://localhost:8081/db/rant/
# jalanakn di directory docker
cd docker
# jalanak compise file
docker compose run -d# test ping container
docker exec -it mongo-express-rant ping mongodb-rant
# login with password
docker exec -it mongodb-rant mongosh -u dar -p dar-rant --authenticationDatabase adminDatabase name : rant
Biarkan WEb app ini menjadi pusat uatamanay , jadi semua data aakn di simpan di database 1 ini ( rant )
file dengan extensi nama_file.db.service.ts : adalah file model untuk database nya
- Data Dummmy untuk semua bot
- Table database rant menentukan spesifikasi bahasa untuk rant nya ( indo , aceh , english) itu berdasarkan table nya
- Meskipun jutaan pesan dari ribuan pengguna berada di dalam satu collection yang sama (chats), database tidak akan pernah tertukar atau salah menampilkan pesan.
- roomId ini bertindak seperti "Nomor ID Kamar". Ketika User A mengobrol dengan User B, server akan men-generate ID kamar yang unik dan konsisten (misalnya: p2p_660a_660b).
- Semua pesan yang mereka kirim selamanya akan dicap dengan roomId tersebut
- Saat query dijalankan, MongoDB tidak perlu membaca seluruh isi database dari atas ke bawah. MongoDB akan langsung melompat ke bagian daftar isi roomId yang dicari, mengambil pesannya, dan mengurutkannya berdasarkan waktu (createdAt). Proses ini terjadi dalam hitungan milidetik!
dataset juga di simpan di sini
- dataset indo : https://huggingface.co/datasets/bgdar/dataset-rant-indo
- dataset aceh : https://huggingface.co/datasets/bgdar/dataset-rant-aceh
Json response :
message: informasi yang di kirim dari server baik atau burukstatus: status message :- success : message berhasil
- info :
- warning :
- error :
- #ff0000 ( main color )
- #000000
- #ffffff
- #999999 ( medium gray)
forums.module: modular untuk forums di web ini yang mempunyaichat,grub- `rant
nama.db.service : untuk Model atau komunikasi ke database
- Untuk menjalanakn , yang di hosting tidak hanya web tapi juga semua Bot , berdasarkan kataogi sosmed
Module di sini gak rapi sesuia konsep nest , tapi ide sendiri wkwkw
Nest is MIT licensed.