Daftar isi
Keterangan
PERINGATAN
Fitur
Batasan
Penggunaan
Info fitur Misc
Tips dan trik acak
Tautan
Info lebih lanjut tentang pemblokiran klien pihak ketiga
API dan Catatan Implementasi
RDIRCD adalah daemon yang memungkinkan menggunakan akun perselisihan pribadi melalui klien IRC.
Ini menerjemahkan semua obrolan pribadi dan saluran publik/utas pada "Server Perselisihan" ke dalam saluran di server IRC yang dibuatnya dan Anda dapat terhubung dengan menggunakan klien IRC biasa, alih -alih browser atau aplikasi elektron.
"Dapat diandalkan" ada dalam nama karena salah satu tujuan awal adalah membuatnya mengkonfirmasi pengiriman pesan dan memberi tahu tentang masalah apa pun dalam hal itu, yang agak kurang pada klien serupa lainnya pada saat itu.
Ada saluran IRC untuk membicarakan hal itu - bergabunglah dengan #rdircd di Libera.chat.
URL IRC: IRCS: //irc.libera.chat/rdircd (GitHub menolak untuk membuat IRCS: // Links)
Lihat juga bagian tautan di bawah untuk daftar klien alternatif lainnya yang jarang diperbarui.
URL Repositori:
Yang terakhir memiliki catatan git dengan daftar TODO dan semacamnya di referensi default untuk itu.
Meskipun saya tidak akan menyebut aplikasi ini sebagai "bot" atau "mengotomatiskan akun pengguna standar" - bermaksud di sini bukan untuk memposting pesan otomatis atau mengikis apa pun - staf perselisihan yang cukup yakin menganggap semua klien pihak ketiga menjadi "bot", dan mengharuskannya untuk setiap server yang disetujui oleh setiap server vs yang disetujui oleh setiap. pengguna non-admin acak.
Aplikasi ini tidak menampilkan dirinya sebagai "bot" dan tidak menggunakan titik akhir khusus bot, jadi menggunakannya dapat mengakibatkan penghentian akun jika ditemukan.
Lihat juga info lebih lanjut tentang bagian pemblokiran klien pihak ketiga di bawah ini.
Anda telah diperingatkan! :)
Pemesanan dan pengiriman pesan keluar yang dapat diandalkan, dengan pemberitahuan eksplisit untuk masalah apa pun yang terdeteksi.
Dukungan untuk saluran pribadi dan publik, pemesanan saluran, utas, forum, kecuali untuk membuat yang baru dari ini.
Saluran Catch-All Global dan Global untuk melacak aktivitas umum.
Nama lokal yang dapat dikonfigurasi alias/ganti nama, blok/penggantian pesan keluar, regexp-filtering untuk pesan yang diterima.
Dukungan untuk konfigurasi ulang runtime terbatas melalui saluran #RDIRCD.Control.
Perselisihan yang sederhana dan konsisten untuk terjemahan IRC Guild/Channel/User nama.
Tak satu pun dari ini akan berubah setelah penyambungan ulang, saluran atau server perombakan, dll - terjemahan sebagian besar deterministik dan tidak bergantung pada nama lain.
Terjemahan untuk perselisihan menyebutkan, balasan, lampiran, stiker dan emoji dalam MSG yang masuk, acara lain, anotasi dasar untuk beberapa tautan tertanam.
Dukungan Terbatas untuk Terjemahan Pengguna Discord menyebutkan dan emoji dalam pesan, sunting, dan penghapusan terkirim.
Backlog yang mudah diakses melalui/topik (/t) Perintah di saluran apa pun, misalnya "/t LOG 2H" untuk menunjukkan 2 jam terakhir jaminan atau "/t log 2019-01-08" untuk membuang simpanan dari titik itu ke saat ini, mengambil dalam beberapa batch jika perlu.
Pesan yang dikirim melalui cara lain (misalnya browser) akan disampaikan ke IRC juga, mungkin berasal dari nick yang berbeda, jika nama IRC tidak cocok dengan terjemahan Nick perselisihan-ke-Circ.
Dukungan/penggunaan unicode penuh di mana -mana.
Protokol IRC diimplementasikan dari dokumen IRCV3, tetapi tidak menggunakan hal-hal non-RFC, jadi harus kompatibel dengan klien lama. Pembungkus TLS opsional.
Opsi Protokol dan Debug Logging yang luas, beberapa dapat diakses saat runtime melalui saluran #RDIRCD.Debug.
Skrip python3 tunggal yang hanya membutuhkan modul aioHTTP, sepele untuk dijalankan atau digunakan di mana saja.
Berjalan dalam jejak memori ~ 40m yang relatif stabil pada AMD64, yang mungkin lebih dari misalnya Bitlbee-Discord, tetapi lebih baik daripada tab browser yang bocor.
Mudah diubah dan debug tanpa pembangunan kembali, GDB, karat dan semacamnya.
Hanya pengguna yang menyebutkan dan emoji yang dikirim dari IRC yang diterjemahkan ke dalam tag perselisihan (jika diaktifkan dan dengan beberapa keanehan, lihat di bawah) - bukan saluran, peran, stiker, komponen, dll.
Tidak ada dukungan untuk mengirim lampiran atau embed apa pun - gunakan webui untuk itu, bukan IRC.
Perselisihan secara otomatis memberi anotasi tautan, jadi memposting media sesederhana itu.
Tidak ada tindakan spesifik perselisihan di luar semua jenis membaca dan mengirim pesan ke saluran yang ada didukung - yaitu tidak membuat akun atau saluran pada perselisihan, mengelola peran, undangan, larangan, waktu tunggu, dll - Gunakan webui, harmoni atau bot discord yang tepat.
Membuat obrolan pribadi baru dan utas saluran/forum tidak didukung.
Untuk obrolan pribadi, mungkin bahkan berbahaya untuk mendukung - lihat info lebih lanjut tentang bagian pemblokiran klien pihak ketiga di bawah ini untuk detailnya.
Tidak melacak kehadiran pengguna (online, offline, AFK, permainan, dll) sama sekali.
Tidak memancarkan acara penggabungan /bagian pengguna dan menangani IRC /nama dengan cara yang sangat sederhana, hanya mendaftarkan torehan yang menggunakan saluran sejak startup aplikasi dan dalam waktu-names-timeout (1 hari secara default).
Benar-benar mengabaikan semua hal non-obrolan secara umum (misalnya suara, profil pengguna, perpustakaan game, toko, daftar teman, dll).
Perselisihan melacak sisi server "read_state", yang tidak digunakan di sini dengan cara apa pun - memicu replay riwayat hanya dilakukan secara manual (/t perintah dalam chans), jadi kadang -kadang mudah untuk dilewatkan pada koneksi ulang yang tenang.
Tidak mendukung mode otentikasi multifaktor perselisihan, tetapi auth yang di -token mungkin dapat mengatasinya - lihat catatan tentang captcha di bawah ini.
Perintah Slash (untuk bot) tidak didukung dengan cara khusus apa pun, tetapi Anda mungkin masih dapat mengirimkannya, jika klien IRC akan melewatinya.
Bukan hal yang paling ramah pengguna, meskipun mungkin sama dengan IRC itu sendiri.
Saya hanya menjalankannya di Linux, jadi tidak mungkin untuk "hanya bekerja" di OSX/Windows, tetapi idk.
Implementasi ad-hoc khusus dari Discord dan IRC, tidak menguntungkan dari segala jenis paparan dan pengujian pada PYPI dan kompatibilitas WRT, bug dan case sudut tersebut.
Tampaknya menentang pedoman perselisihan untuk menggunakannya - lihat bagian peringatan di atas untuk lebih jelasnya.
Pada platform OpenBSD, saat menggunakan SCRYPT IRC password-hash= , mungkin juga perlu menginstal Modul Scrypt secara terpisah (melalui EG pkg_add py3-scrypt ), karena port Python tampaknya tidak memiliki hashlib.scrypt di stdlib-nya.
Cara paling sederhana adalah menggunakan paket untuk/dari distribusi Linux Anda, jika tersedia.
Paket distro yang saat ini dikenal (per 2020-05-17):
Ada juga Dockerfile dan Docker-Compose.yml untuk menjalankan ini di Docker/Podman atau lingkungan yang kompatibel dengan OCI lainnya.
(Lihat juga Dokter README.Docker-SMISSIONS.MD untuk info tentang masalah akses umum dengan itu)
Harus mudah untuk menginstal satu skrip dan beberapa dependensi secara manual juga, seperti yang dijelaskan dalam bagian lain dari bagian di bawah ini.
Di Debian/Ubuntu, menginstal dependensi dapat dilakukan dengan perintah yang satu ini:
# apt install --no-install-recommends python3-minimal python3-aiohttp
Distro Linux lain kemungkinan memiliki paket yang serupa juga, dan saya akan merekomendasikan mencoba menggunakan ini sebagai opsi pertama, sehingga mereka mendapatkan pembaruan dan untuk menghindari beban pemeliharaan lokal tambahan, dan hanya mundur untuk memasang modul melalui "PIP" jika itu gagal.
Pada setiap distro sewenang -wenang dengan Python (python3) diinstal, menggunakan PIP/VENV untuk menginstal modul AIOHTTP (dan DEP -nya) untuk tidak mampu "RDIRCD" rumah pengguna mungkin berfungsi (yang juga digunakan untuk menjalankan RDIRCD dalam contoh berikutnya), tetapi abaikan jika Anda sudah menginstalnya melalui OS Manager atau seperti itu:
root # useradd -m rdircd
root # su - rdircd
## Option 1: use venv to install dependencies into "_venv" dir
rdircd % python3 -m venv _venv
rdircd % ./_venv/bin/pip install aiohttp
## Option 2: install pip (if missing) and use it directly
rdircd % python3 -m ensurepip --user
rdircd % python3 -m pip install --user aiohttp
Jika Anda memiliki/menggunakan PIPX (misalnya dari Distro Repo), itu dapat digunakan untuk menjalankan aplikasi Python seperti ini dan dependensi pemeliharaan otomatis -cukup "PIPX Jalankan" skrip utama: pipx run rdircd --help -tanpa perlu menyentuh VENV atau PIP sama sekali (PIPX akan melakukannya "di bawah tudung").
Setelah persyaratan di atas diinstal, skrip itu sendiri dapat diambil dari repositori ini dan dijalankan seperti ini:
## Ignore "useradd" if you've already created a user when running "pip" above
root # useradd -m rdircd
root # su - rdircd
## If using "venv" install example above - load its env vars
# Or alternatively run script via "./_venv/bin/python rdircd ..." command line
rdircd % source ./_venv/bin/activate
rdircd % curl -OL 'https://raw.githubusercontent.com/mk-fg/reliable-discord-client-irc-daemon/master/rdircd{,.unicode-emojis.txt.gz}'
rdircd % chmod +x rdircd
## Use "pipx run rdircd ..." here and below, if using pipx instead of pip/venv/distro-pkgs
rdircd % ./rdircd --help
...to test if it runs...
rdircd % ./rdircd --conf-dump-defaults
...for a full list of all supported options with some comments...
...alternatively, to create rdircd.ini template: ./rdircd -c rdircd.ini --conf-init
rdircd % nano rdircd.ini
...see below for configuration file info/example...
rdircd % ./rdircd --debug -c rdircd.ini
...drop --debug and use init system for a regular daemon...
Untuk mengatur daemon/skrip yang akan dijalankan pada boot OS, rdircd.service file unit SystemD dapat digunakan di sebagian besar lingkungan Linux (Edit execStart = opsi dan jalur di sana), atau mungkin melalui init.d skrip, atau mungkin di sesi "layar" sebagai opsi ad-hoc resor terakhir. Pastikan itu berjalan sebagai pengguna "RDIRCD" yang dibuat dalam cuplikan di atas, bukan sebagai root.
Untuk memperbarui skrip nanti, jika diperlukan, ganti dengan versi terbaru, misalnya melalui unduhan ulang dengan perintah curl di atas, git-pull pada klon repo, docker-compose up --build , memperbarui paket OS, atau dengan cara lain, biasanya terkait dengan bagaimana ia diinstal di tempat pertama.
Buat file konfigurasi dengan kredensial Discord dan IRCD auth di ~/.rdircd.ini (lihat semua --conf... opts wrt ini):
[irc]
password = hunter2
[auth]
email = [email protected]
password = discord-passwordCatatan: Kata sandi IRC dapat dihilangkan, tetapi pastikan untuk memadamkan port itu dari semua yang ada di sistem kemudian (atau mungkin lakukan itu).
Jika Anda mengatur kata sandi, mungkin jangan gunakan IRC password= opsi seperti di atas, dan gunakan password-hash= dan -H/--conf-pw-scrypt untuk menghasilkannya. Bagaimanapun, pastikan untuk menggunakan kata sandi itu saat mengkonfigurasi koneksi ke server ini di klien IRC juga.
Mulai daemon rdircd: ./rdircd --debug
Hubungkan Klien IRC ke "LocalHost: 6667" - Default Listen/Bind Host and Port.
(Lihat ./rdircd --conf-dump-defaults atau cli -i/--irc-bind / -s/--irc-tls-pem-file untuk mengikat pada host/port yang berbeda dan pembungkus soket TLS, untuk koneksi non-localhost)
Gunakan perintah IRC /list untuk melihat saluran untuk semua server /guild yang bergabung dengan:
Channel Users Topic
------- ----- -----
#rdircd.control 1 rdircd: control channel, type "help" for more info
#rdircd.debug 1 rdircd: debug logging channel, read-only
#rdircd.monitor 1 rdircd: read-only catch-all channel with messages from everywhere
#rdircd.leftover 1 rdircd: read-only channel for any discord messages in channels ...
#rdircd.voice 1 rdircd: read-only voice-chat notifications from all discords/channels
#rdircd.monitor.jvpp 1 rdircd: read-only catch-all channel for discord [ Server-A ]
#rdircd.leftover.jvpp 1 rdircd: read-only msgs for non-joined channels of discord [ Server-A ]
...
#me.chat.SomeUser 1 me: private chat - SomeUser
#me.chat.x2s456gl0t 3 me: private chat - some-other-user, another-user, user3
#jvpp.announcements 1 Server-A: Please keep this channel unmuted
#jvpp.info 1 Server-A:
#jvpp.rules 1 Server-A:
#jvpp.welcome 1 Server-A: Mute unless you like notification spam
...
#axsd.intro 1 Server-B: Server info and welcomes.
#axsd.offtopic 1 Server-B: Anything goes. Civility is expected.
Catatan informasi di sini:
/j #axsd.offtopic ( /join ) Seperti yang akan Anda lakukan dengan IRC biasa untuk melihat /memposting MSG di sana.
Saluran bergabung/bagian di sisi IRC tidak mempengaruhi perselisihan dengan cara apa pun.
Jalankan /topic (sering berfungsi sebagai /t ) IRC-Command untuk menampilkan lebih banyak info tentang perintah khusus saluran, EG /t log untuk mengambil dan memutar ulang backlog mulai dari acara terakhir sebelum shutdown RDIRCD terakhir, /t log list untuk mencantumkan semua stempel aktivitas yang dilacak RDIRCD, atau /t log 2h untuk mengambil /buang log saluran untuk /dari waktu spesifik.
Perintah Kontrol/Konfigurasi Daemon tersedia di #RDIRCD.Control Channel, #RDIRCD.Debug Chan dapat digunakan untuk mengubah berbagai penebangan dan memeriksa status daemon dan protokol lebih dekat, Kirim "Bantuan" ke sana untuk daftar perintah yang tersedia.
Untuk garis besar berbagai pengaturan konfigurasi yang didukung, lihat file rdircd.defaults.ini (output dari ./rdircd --conf-dump-defaults ), dan lebih banyak lagi tentang penggunaan tertentu di bawah ini.
Catatan tentang berbagai fitur opsional dan kurang jelas dikumpulkan di sini.
Lihat bagian "Penggunaan" untuk informasi yang lebih umum.
Beberapa file INI dapat ditentukan dengan opsi -c , saling mengesahkan secara berurutan.
Yang terakhir akan diperbarui WRT [status], token = dan hal -hal runtime serupa, serta nilai apa pun yang ditetapkan melalui #rdircd.control channel perintah, sehingga dapat berguna untuk menentukan konfigurasi persisten dengan auth dan opsi, dan terpisah (awalnya kosong) satu untuk keadaan dinamis tersebut.
Misalnya ./rdircd -c config.ini -c state.ini akan melakukannya.
--conf-dump dapat ditambahkan untuk mencetak yang dihasilkan INI dirakit dari semua ini.
--conf-dump-defaults Flag dapat digunakan untuk mendaftar semua opsi dan defaultnya.
Pembaruan cap waktu yang sering dilakukan dilakukan di tempat (nilai-nilai panjang tetap kecil), tetapi memeriksa CTime sebelum ditulis, jadi harus aman untuk mengedit file-file ini secara manual kapan saja.
Mengirim Sighup ke Perintah Script atau "Muat Ulang" di saluran kontrol harus memuat dan menerapkan nilai dari semua file konfigurasi dalam urutan yang sama. Perhatikan bahwa operasi semacam itu tidak akan mengatur ulang nilai apa pun yang hilang dalam file ke defaultnya, hanya menerapkan barang yang secara eksplisit diatur di atas konfigurasi saat ini.
Semua obrolan di RDIRCD (dan Discord) adalah saluran .
IRC /Q, /kueri dan /MSG tidak dapat digunakan dengan cara yang khas IRC.
Untuk berbicara dalam obrolan pribadi apa pun, bergabunglah dengan saluran seperti #me.chat. <senername>, yang berperilaku seperti saluran perselisihan/rdircd lainnya.
Saat ini tidak ada cara untuk membuat obrolan pribadi baru dari RDIRCD, menggunakan klien lain atau WebUI untuk itu (atau meminta seseorang untuk menghubungi Anda terlebih dahulu), tetapi begitu saluran obrolan pribadi dibuat, itu dapat digunakan di RDIRCD juga.
Lihat juga saluran auto-goining dan /atau /gabungkan /eg #rdircd.leftover.me channel untuk memantau pesan pribadi dengan andal, jika diperlukan.
Di semua saluran IRC yang mewakili saluran perselisihan - Kirim /topic (OR /t - SHORTHAND untuk itu sering didukung pada klien IRC) - yang seharusnya mencetak info terkini tentang semua perintah khusus saluran, seperti itu:
/t info - Tampilkan beberapa informasi guild/saluran internal, seperti ID dan semacamnya untuk ganti nama.
Jika mencetak nama saluran yang tepat pada perselisihan (tanpa ganti nama lokal atau terjemahan perselisihan yang dilakukan RDIRCD), topik, jenis, dll, antara lain.
/t info {user-name...} - Info kueri tentang nama pengguna (atau bagian dari itu) di perselisihan ini.
Misalnya, /t info joe137 akan mencari pengguna joe137 di server perselisihan yang dimiliki oleh saluran, mencetak info tentang mereka, seperti berbagai nama perselisihan mereka.
/t log [state] - REJATAN PLAY Sejak "state" point (stop rdircd terakhir secara default).
/t log (sama seperti /t log 1 ) dapat digunakan misalnya setelah restart rdircd untuk meminta perselisihan untuk setiap pesan yang mungkin telah diposting setelah dihentikan, dan sebelum dimulai kembali lagi (ditambah yang lain sejak itu).
Atau /t log 0 untuk memeriksa riwayat sejak pesan terakhir yang telah dilihat RDIRCD, untuk kasus -kasus ketika perselisihan /jaringan flakey dan sesuatu mungkin telah hilang seperti itu.
1 0 /t log list [state]
Ini juga dapat digunakan dengan waktu absolut atau relatif, EG /t log 15m untuk meminta /memutar ulang riwayat saluran dalam 15 menit terakhir, atau /t log 2019-01-08 12:30 untuk memutar ulang riwayat sejak waktu RDIRCD-lokal spesifik (kecuali waktu yang ditentukan di sana juga).
Just /t atau /topic di saluran proxy perselisihan apa pun akan mencantumkan lebih banyak perintah seperti itu dan info lebih lanjut tentang cara menggunakannya.
Pesan terakhir yang dikirim ke saluran perselisihan dapat diedit menggunakan perintah penggantian-Sed seperti s/hoogle/google/ untuk memperbaiki kesalahan ketik atau dengan cepat mengubah/menata ulang/mengklarifikasi baris terakhir itu.
Atau //del dapat digunakan untuk menghapusnya - lihat bagian "Edit/Hapus Cepat" di bawah ini.
@silent awalan-komandan dalam pesan dapat menekan pemberitahuan pengguna tentang hal itu (juga dijelaskan di bawah di suatu tempat).
Di saluran khusus seperti #rdircd.control dan #rdircd.debug: kirim h atau help .
Mereka dapat memiliki daftar perintah yang didukung yang agak panjang, misalnya di sini adalah beberapa perintah untuk #rdircd.control:
status (atau st ) dapat digunakan untuk memeriksa Infos koneksi Discord dan IRC.
Perintah connect / disconnect (atau on / off ) dapat digunakan untuk mengontrol koneksi perselisihan secara manual, misalnya untuk penggunaan yang lebih satu kali, atau untuk sementara menekan peringatan Conn yang gagal saat jaringan lokal turun seperti itu.
set irc-disable-reacts-msgs yes -Pemberitahuan Reaksi Perselisihan TEMP-Disisable (Menggunakan Perintah set ).
Atau set -s irc-disable-reacts-msgs yes untuk membuatnya permanen ( -s/--save flag untuk menghemat nilai ke file konfigurasi INI), atau set sederhana tanpa parameter untuk melihat semua opsi konfigurasi umum dan nilainya.
rx Block mee6 bot-noise = (?i)^<MEE6> -temp-block semua pesan dari mee6 bot.
(Lihat bagian tentang pemfilteran ini di bawah ini, atau lebih banyak contoh barang tersebut di bawah tip-dan-trik)
... dan ada lebih banyak dari itu-ketik help di sana untuk info terbaru.
#rdircd.monitor dapat digunakan untuk melihat aktivitas dari semua server yang terhubung - mendapatkan semua pesan, diawali dengan nama saluran IRC yang relevan.
#rdircd.monitor.guild (di mana "guild" adalah hash atau alias, lihat di atas) adalah saluran tangkapan-semua yang serupa untuk server/guild perselisihan tertentu.
#rdircd.monitor.me dapat bermanfaat, misalnya, untuk memantau setiap obrolan dan pesan pribadi untuk akun perselisihan (lihat juga contoh saluran auto-loining).
#rdircd.leftover dan serupa #rdircd.leftover.guild saluran seperti saluran monitor, tetapi melewatkan pesan dari saluran apa pun yang klien IRC gabung-ed, termasuk EG /join #rdircd.leftover.game-x tidak ada hubungan roniting yang tidak ada gabungan dari gambaran, tidak ada gabungan dari county global #rdircd noing noing noing noing no countd #rdircd noing-x "sisa" dengan cara apa pun).
#RDIRCD.Voice adalah saluran yang mirip dengan #rdircd.monitor, tetapi hanya menangkap pemberitahuan acara obrolan, untuk dapat melacaknya secara tepat waktu.
Saluran-saluran ini dapat diabaikan jika tidak diperlukan, atau dinonaktifkan sepenuhnya dengan mengatur misalnya chan-monitor ke nilai kosong di bawah bagian [IRC] INI Config-File. Misalnya, saluran aktivitas suara per-discord disingkirkan di sana.
File konfigurasi juga memiliki bagian [unmonitor] untuk daftar nama-nama saluran opsional untuk diabaikan di saluran monitor/sisa, misalnya:
[unmonitor]
# All filters are applied to channel names and are case-insensitive
Ignore this particular " bot-commands " channel = game-X.bot-commands
skip forum threads in " game-X " guild = glob:game-X.forum.=*
" wordle " threads in any guild (and chans ending in .wordle) = glob:*.wordle
Don ' t show threads in any forum-like channels = re:^[^.]+ . (forum|discuss) . =.*
disregard all voice-chat stuff = glob:*.vc Kunci (seperti sebagian sebelumnya "=") di bagian konfigurasi seperti itu diabaikan, dan dapat berupa apa saja, misalnya komentar yang menjelaskan polanya (seperti pada contoh di atas), sedangkan nilai adalah nama saluran yang tepat (dengan awalan perselisihan, opsional #-prefix), atau "global"/"RE:"-PERTIMBER-KOMEX/KOMOX, POLA DALAM POBLOK/KOMOX/PPREXP (POBLOXP ATAU KOMOX <some-key/comment> = glob:<wildcard-pattern> Glob atau pps) <some-key/comment> = glob:<wildcard-pattern> atau <some-key/comment> = re:<regexp-pattern> Baris-lihat contoh tepat di atas.
Nama saluran yang cocok dengan filter tersebut akan dijatuhkan dari saluran monitor, jadi ini dapat digunakan untuk menentukan daftar hal-hal spam yang tidak Anda pedulikan dan tidak ingin melihat bahkan di sana.
Perintah "Unmonitor" (atau "Um") di #rdircd.control dapat menambah/menghapus filter seperti itu saat itu. Lihat juga opsi konfigurasi match-counters untuk melacak apakah aturan spesifik masih diperlukan/digunakan.
Pesan dalam saluran monitor terbatas pada panjang/garis tertentu, untuk menghindari banjir berlebihan dengan MSG panjang dan/atau multi-line. Parameter "Len-Monitor" dan "Len-Monitor-Lines" di bawah bagian Konfigurasi [IRC] dapat digunakan untuk mengontrol batas-batas ini, lihat "./rdircd --conf-dump-defaults" output untuk nilai default mereka. Ada juga opsi untuk mengubah format nama saluran monitor.
Di IRC, setiap orang memiliki satu nama, tetapi bukan itu masalahnya dengan perselisihan, di mana setiap pengguna dapat memiliki nama berikut:
login - Perselisihan "Nama Pengguna", secara unik mengidentifikasi setiap pengguna.display - "Nama Tampilan" yang ditetapkan oleh Pengguna di Pengaturan Akun Discord, tidak unik.nick - Server dan teman "nama panggilan", ditetapkan dalam pengaturan server Discord, tidak selalu oleh Anda. login adalah konsep terdekat dengan julukan IRC, karena unik secara global, konsisten, pendek, ascii-hanya, dan dapat digunakan dengan mengatur name-preference-order = login di bagian [Discord] (bukan default).
Klien Discord Resmi menampilkan nama lain terlebih dahulu, itulah sebabnya opsi name-preference-order default ke nick display login Value, yang menggunakan julukan perselisihan/teman-khusus terlebih dahulu, jika ada, kembali ke nama bentuk bebas yang diatur pengguna dalam pengaturan akun, dan nama login mereka sebaliknya.
Hal-hal lain dalam nama panggilan pengguna mewah yang tidak diizinkan IRC juga diganti dengan karakter unicode umum, spasi dengan "·" titik-titik tengah misalnya, atau <> kurung IRC-nick umum dengan ◄► panah unicode. Perselisihan panjang terpotong.
Tidak ada pemberitahuan IRC tentang pengguna yang mengubah tampilan/nick-name khusus perselisihan mereka saat ini, dan mereka tidak harus unik, yang mungkin membuat sulit untuk mengatakan siapa-siapa-siapa, jika mereka terus mengubah torehan karena alasan apa pun.
Semua ini dapat dikonfigurasi melalui pengaturan file INI (atau di #rdircd.control channel), jadi jika terlalu konyol dan menjengkelkan, atur name-preference-order = login untuk menggunakan gulma ramah IRC yang konsisten untuk semua orang sebagai gantinya.
Perintah IRC /who /topic info dapat membantu menerjemahkan di antara nama -nama ini, misalnya /t info john1234 dapat digunakan untuk mencetak info untuk nama /login itu dalam buffer saluran, yang seharusnya mencakup semua pengguna dengan kecocokan parsial dari nama itu pada perselisihan spesifik itu, sementara /who Command mencari semua yang bergabung dengan perselisihan.
(Lebih seperti "ganti nama" daripada "alias", karena nama lama tidak terus bekerja untuk ini)
Dapat didefinisikan dalam file konfigurasi untuk menggantikan awalan perselisihan berbasis hash atau nama saluran server dengan sesuatu yang lebih mudah dibaca/mengesankan atau bermakna bagi Anda:
[renames]
guild.jvpp = game-x
guild.sn3y = log-bot
guild.sn3y.chan-fmt = logs/{name}.log
chan.some-long-and-weird-name = weird
chan.@ 710035588048224269 = general-subs
user.noname123 = my-pal-bob
user.@ 123980071029577864 = joeIni harus:
Turn misalnya #jvpp.info menjadi #game-x.info-Letterpoup Guild-ID menjadi awalan yang lebih bermakna. Ini akan berlaku untuk semua saluran di ganti nama "guild" itu.
Ubah format untuk nama saluran "SN3Y" Discord dari sesuatu seperti #sn3y.debug ke #log/debug.log - Mengubah format nama saluran.
Template Format menggunakan sintaks Python Str.Format dengan "Nama" (nama saluran) dan "awalan" (awalan guild - akan menjadi nilai "log -bot" dalam contoh ini). Format default adalah {prefix}.{name} .
Opsi format ini tidak mempengaruhi nama saluran monitor/leftover (misalnya #rdircd.monitor.log-Bot atau #rdircd.leftover.game-x)-lihat opsi "Chan-Monitor-Guild" dan "Chan-Leftover-Guild" di bawah [IRC] untuk mengubahnya.
Ganti nama itu saluran panjang untuk memiliki nama yang lebih pendek (awalan guild penahan) - ganti nama "chan".
Perhatikan bahwa ini mempengaruhi semua guild di mana nama saluran tersebut ada, dan nama sumber harus dalam format IRC, sama seperti di /daftar, dan RFC1459-casemapped (sama seperti pada IRC).
Ganti nama saluran dengan ID = 710035588048224269 menjadi "meme" (awalan guild penahan) - ganti nama "chan" menggunakan spesifikasi @channel -id.
Pengidentifikasi saluran perselisihan yang panjang itu (juga disebut "kepingan salju") dapat ditemukan dengan mengetik /t info topik-komand di saluran IRC yang sesuai, dan dapat digunakan untuk merujuk ke saluran tertentu, yaitu mengubah nama yang satu ini #General di server Discord yang satu ini alih-alih mengganti nama semua saluran #General di mana-mana.
Ini sangat berguna ketika dua saluran memiliki nama persis yang sama dalam perselisihan yang sama, dan biasanya akan diberikan .<id-hash> akhiran non-deskriptif.
Ganti nama pengguna pasangan, dirujuk oleh nama pengguna dan ID Discord mereka.
/t info <nick-or-part-of-it> perintah dalam saluran discord atau yang serupa /who -command dapat membantu untuk mencari ID perselisihan, seperti yang digunakan di sana.
Saat ini hanya jenis ganti nama yang terdaftar yang diimplementasikan, untuk awalan dan saluran perselisihan, tetapi ada juga opsi di bawah bagian [IRC] untuk mengatur nama sistem/monitor/sisa dan saluran obrolan pribadi-"chan-sys", "chan-private", "chan-monitor" dan seperti itu (lihat ".
Atur chan-monitor-guild = {prefix} misalnya, untuk memiliki saluran #game-x menjadi tangkapan-semua untuk semua pesan di perselisihan itu, tanpa default long #rdircd.monitor.* Prefix.
Perselisihan pesan pribadi membuat dan diposting ke saluran di server/guild "Me", sama seperti yang mereka lakukan di Discord Webui, dan dapat berinteraksi dengan dengan cara yang sama seperti guild/saluran lainnya (daftar, bergabung/bagian, kirim/recv msgs, dll).
Bergabunglah #rdircd.monitor.me (atau #rdircd.monitor, lihat di atas) untuk mendapatkan semua MSG/obrolan baru di sana, serta pemberitahuan perubahan hubungan (permintaan pertemanan/menambahkan/menghapus) sebagai pemberitahuan.
Menerima permintaan pertemanan dan menambahkan/menghapus ini dapat dilakukan melalui perselisihan reguler WebUI dan tidak diimplementasikan pada klien ini dengan cara khusus apa pun.
Lihat juga Bagian Saluran Auto-bergabung di bawah ini untuk cara mudah untuk muncul obrolan pribadi baru di klien IRC melalui undangan.
"Threads" adalah fitur perselisihan, yang memungkinkan pengguna non-admin untuk membuat sub-channel ad-hoc sementara kapan saja untuk topik tertentu, yang dikeluarkan secara otomatis ("diarsipkan") setelah batas waktu yang relatif tidak aktif (seperti hari).
Saluran "Forum" Discord pada dasarnya adalah saluran, di mana orang hanya dapat membuat dan berbicara di Theads, dengan daftar mereka yang menggantikan obrolan saluran default.
Semua utas yang tidak diarahkan harus ditampilkan dalam daftar saluran RDIRCD sebagai saluran IRC reguler, dengan nama-nama seperti #GG.General. = VOT5.Lets · Diskusikan · Barang, memperluas nama Chan orang tua dengan tag ID utas ("= vot5" dalam contoh ini) dan nama utas yang mungkin dipotong (lihat "Thread-Chan-Name-Len" Opsi Konfigurasi).
Ada beberapa opsi untuk bagaimana melihat dan berinteraksi dengan utas dari saluran induk (kebanyakan di bagian [Discord], lihat-output default-default):
[irc]
thread-chan-name-len = 30
[discord]
thread-id-prefix = =
thread-msgs-in-parent-chan = yes
thread-msgs-in-parent-chan-monitor = no
thread-msgs-in-parent-chan-full-prefix = no
thread-redirect-prefixed-responses-from-parent-chan = yes
...Tetapi bahkan dengan semua cacat ini, pemberitahuan sederhana harus dikirim ke saluran ketika utas dimulai, sehingga seseorang tidak akan melewatkannya sepenuhnya.
Tidak ada dukungan untuk membuat utas baru dari IRC, yang lama tidak mengarsipkan atau mengelola ini, dan bergabung dengan saluran utas di IRC tidak sebenarnya "bergabung dengan utas" di UI Discord (menyematkannya dengan nama saluran), tetapi memposting apa pun yang harus dilakukan secara otomatis.
Pengaturan "Chan-Auto-Join-Re" di bagian [IRC] memungkinkan untuk menentukan RegExp untuk mencocokkan nama saluran (tanpa # awalan) untuk auto-gooin ketika ada pesan yang muncul di dalamnya.
Misalnya, untuk auto-bergabung dengan #Me.* Saluran (pesan langsung), mengikuti nilai ekspresi reguler (sintaks "Python" Re ") dapat digunakan:
[irc]
chan-auto-join-re = ^me. Atau memiliki klien IRC secara otomatis bergabung dengan semua saluran, gunakan chan-auto-join-re = .
Nilai kosong untuk opsi ini (default) tidak akan cocok dengan apa pun.
Ini dapat digunakan sebagai alternatif untuk melacak barang -barang baru melalui #rdircd.monitor/sisa saluran.
RegExp ini dapat diubah saat runtime menggunakan perintah "Set" di #rdircd.control channel, sama seperti nilai lainnya, untuk misalnya mengaktifkan/menonaktifkan fitur ini untuk perselisihan atau saluran tertentu.
Menyebutkan adalah tag @username pada perselisihan, dirancang untuk mengingatkan seseorang untuk pesan langsung.
Dengan konfigurasi default, saat Anda melihat misalnya <Galaxy?·Brain> Hi! Dan ingin membalas menyoroti mereka, mengirim Hey @galaxy and welcome mungkin harus berfungsi. Dapat juga menggunakan IRC Nick lengkap mereka, tentu saja.
Cara kerjanya: Jika RDIRCD cocok dengan msg-mention-re regexp conf-option terhadap sesuatu dalam pesan yang dikirim (misalnya @galaxy @-mention di atas), itu akan diperlakukan sebagai "penyebutan", yang disesuaikan secara unik dan diterjemahkan ke dalam perselisihan yang disebutkan dalam pesan yang dikirim, atau mengembalikan kesalahan kesalahan (dengan nick yang secara unik dan diterjemahkan ke dalam perselisihan yang disebutkan dalam pesan yang dikirim, atau mengembalikan kesalahan kesalahan (dengan nick-no yang cocok dan diterjemahkan ke dalam perselisihan yang disebutkan dalam pesan yang dikirim, atau mengembalikan kesalahan kesalahan (dengan Nicks secara unik dan diterjemahkan ke dalam perselisihan yang disebutkan dalam pesan yang dikirim, atau mengembalikan kesalahan kesalahan (dengan Nicks secara unik dan diterjemahkan ke dalam perselisihan yang disebutkan dalam pesan yang dikirim, atau mengembalikan kesalahan kesalahan (dengan nicks secara unik dan diterjemahkan ke dalam perselisihan yang disebutkan dalam pesan yang dikirim, atau mengembalikan kesalahan kesalahan (dengan nicks secara nada
Nilai default untuk itu akan terlihat seperti ini:
[discord]
msg-mention-re = (?:^|s)(@)(?P<nick>[^s, ; @+!]+) Yang akan cocok dengan ruang seperti kata atau tanda baca yang dipisahkan @nick menyebutkan dalam baris terkirim.
Regexp (python "re" sintaks) pasti bernama grup "Nick" dengan string pencarian Nick/username, yang akan diganti dengan tag menyebutkan Discord, dan semua grup penangkap lainnya (yaitu yang tanpa ?: :) akan ditelanjangi (seperti @ di di atas regexp).
REGEXP default di atas masih mengizinkan untuk mengirim EG @something agar terlihat tidak dicahaya di Webapp (dan tanpa karena penurunan harga), karena tidak akan dicocokkan oleh (?:^|s) bagian karena awalan backslash.
Sebagai contoh lain, untuk memiliki sorotan gaya IRC klasik di awal garis, Regexp seperti ini dapat digunakan:
msg-mention-re = ^(?P<nick>S+)(:)(?:s|$)
Dan harus menerjemahkan misalnya mk-fg: some msg ke dalam @mk-fg some msg (dengan @-Bestre yang disebutkan-tag). Ruang trailing termasuk dalam regexp di sana untuk menghindari tautan URL yang cocok.
Untuk ID Pengguna Perselisihan tertentu, grup "Nick" akan digunakan dengan cara berikut:
Kasus yang tidak sensitif terhadap semua nama IRC terkait guild baru-baru ini (penulis pesan, reaksi, pengguna saluran pribadi, dll). user-mention-cache-timeout Config Opsi Mengontrol "Terbaru" Timeout.
Pencarian Nama Unik Penyelesaian dengan awalan, sama seperti Discord di WebUI untuk pelengkapan otomatis setelah @ diketik.
Jika tidak ada kecocokan yang di -cache atau unik yang ditemukan - Pemberitahuan kesalahan akan dikeluarkan dan pesan tidak dikirim.
Perilaku ketat seperti itu dirancang untuk menghindari kesalahan terjemahan yang tidak disengaja, dan menyoroti orang yang salah pada umumnya hanya dimungkinkan melalui salah mengeja.
Opsi msg-mention-re-ignore (RegExp untuk mencocokkan dengan penangkapan penuh pola di atas) juga dapat digunakan untuk melewatkan beberapa hal non-permohonan agar tidak diperlakukan seperti itu, yang jika tidak akan diambil dengan RegExp terlebih dahulu, melucuti kelompok penangkapan dari mereka juga, yang dapat digunakan untuk EG yang melarikan diri.
Perhatikan bahwa daftar pengguna Discord bisa sangat masif (500k+ pengguna), tidak dibagi berdasarkan saluran, dan tidak dimaksudkan untuk dibuat sebelumnya oleh klien, hanya ditanyai untuk penyelesaian atau bagian yang terlihat, yang tidak memetakan dengan baik ke IRC, oleh karena itu semua keajaiban ini.
Regexp serupa dikonfigurasi untuk emoji per-discord:
msg-emoji-re = (?:^|s)(:)(?P<emoji>w+)(:)(?=[^w]|$)
Di mana misalnya I use :Arch: btw dari IRC akan cocok dengan grup RegExp, Lookup/Replace "Emoji" di sana menggunakan emoji perselisihan ini (case-tidak sensitif), dan kirimkan diterjemahkan seperti I use ? btw , atau pengembalian kesalahan pemberitahuan jika emoji seperti itu tidak tersedia dalam perselisihan itu dan tidak ada dalam daftar unicode generik.
Setel msg-mention-re / msg-emoji-re ke nilai kosong untuk menonaktifkan terjemahan tersebut.
Mirip dengan Pengguna Discord menyebutkan di atas, ada opsi RegExp khusus yang cocok dengan perintah yang akan ditafsirkan sebagai pengeditan atau penghapusan pesan terakhir yang dikirim ke saluran ini.
Default RegExps terlihat seperti ini (periksa --conf-dump-defaults jic):
[discord]
msg-edit-re = ^s*s(?P<sep>[/|:])(?P<aaa>.*)(? P =sep)(?P<bbb>.*)(? P =sep)s*$
msg-del-re = ^s*//dels*$ Mereka mencocokkan garis amandemen tindak lanjut seperti SED/Perl/IRC seperti s/spam/ham/ , dan //del Line, yang tidak akan pernah dikirim ke Discord, hanya digunakan sebagai perintah internal.
( s|/some/path|/other/path| dan s:cat /dev/input/mouse0 | hexdump:hexdump </dev/input/mouse0: Sintaks juga diizinkan dengan edit default default, sama seperti SED, untuk lebih mudah menangani hal-hal umum seperti jalur, yang dapat memiliki char ini di dalamnya)
Kedua perintah yang cocok dengan ini beroperasi pada pesan terakhir yang dikirim oleh RDIRCD ke saluran perselisihan yang sama, dengan //del cukup menghapus pesan terakhir itu, dan mengedit menjalankan fungsi pengganti REGEXP Python re.sub () (PCRE-like) di atasnya.
"msg-edit-re" regexp option value matching sed-like command must have named "aaa" and "bbb" groups in it, which will be used as pattern and replacement args to re.sub(), respectively.
If edit doesn't seem to alter last-sent message in any way, it gets discarded, and also generates IRC notice response, to signal that replacement didn't work.
Successful edit/deletion should also be signaled as usual by discord, with [edit] or such prefix (configurable under [irc] section).
Any older-than-last messages can be edited through Discord WebUI - this client only tracks last one for easy quick follow-up oops-fixes, nothing more than that.
Somewhat similar to quick edits/deletes above, "msg-flag-silent-re" option is there to match/remove "@silent" prefix in messages (by default), which disables sending discord push notifications for it, same as with the official client.
That and similar message flags on incoming messages are not represented in any way, as they don't seem to be relevant for an irc client anyway.
Config can have a [send-replacements] section to block or regexp-replace parts of messages sent (by you) from IRC on per-discord basis.
This can be used to add discord-specific tags, unicode shorthands, emojis, stickers, block/replace specific links or maybe even words/language before proxying msg to discord.
Here's how it can look in the ini file(s):
[send-replacements]
*. unicode-smiley = (^| ):)( |$) -> 1?2
*. twitter-to-nitter = ^(https?://)((mobile|www).)?twitter.com(/.*)?$ -> 1nitter.ir4
guildx.never-mention-rust! = (?i)brustb -> <block!>
guildx.localize-color-word = bcolor(ed|iS+)b -> colour1 Where each key has the form of discord-prefix> "." comment , with a special * prefix to apply rule to all discords, while values are regexp " -> " <replacement_or_action with one special <block!> action-value to block sending msg with error-notice on regexp match. "comment" part of the key can be any arbitrary unique string.
So when sending eg test :) msg on IRC, discord will get test ? .
Same as with other regex-using options, regexps have python "re" module syntax, applied via re.sub() function, using raw strings from config value as-is, without any special escapes or interpretations.
Replacements are applied in the same order as specified, but with * keys preceding per-discord ones, and before processing to add discord tags, so anything like @username that can normally be typed in messages can be used there too.
#rdircd.control channel has "repl" command to edit these rules on-the-fly.
If you join #rdircd.monitor channel, see - for example - a message like this:
<helper-bot> #pub.welcomes :: Welcome!
...and think "don't want to see messages like that again!" - config files' [recv-regexp-filters] section or corresponding "rx" command in #rdircd.control channel can help.
Depending on what "messages like that" means, here are some ways to filter those out:
[recv-regexp-filters]
discard msgs from this bot = ^<helper-bot>
ignore all msgs in that channel of that discord = ^S+ # pub.welcomes ::
drop all msgs from " pub " discord = ^S+ # pub.
no messages from # welcomes channels of any discord pls = ^S+ #w+.welcomes ::
never see " Welcome! " message-text again!!! = ^S+ # S+ :: Welcome!$
some combination of the above = (?i)^<helper-bot> # w+.welcomes ::
...(tweak eg last example on regex101.com for more hands-on understanding)
Lines in that section have the usual <key> = <regexp> form, where <key> part can be anything (eg comment to explain regexp, like in examples above), and <regexp> value is a regular expression to match against the message in <user> #discord.channel-name :: message text format like that helper-bot msg presented above, and same as can be seen in monitor-channels.
Any message received from discord will be matched against all regexps in order, stopping and discarding the message everywhere on first (any) match. So it might be a good idea to write as precise patterns as possible, to avoid them matching anything else and dropping unrelated messages accidentally.
Same as with some other conf options, basic knowledge of regular expressions might be needed to use such filters - here's a link to nice tutorial on those (though there are 100s of such tutorials on the web).
Particular regexps here use PCRE-like python re syntax, with re.DOTALL flag set ( . matches newlines in multiline messages). I'd also recommend commonly adding (?i) case-insensitive-match flag, as IRC nicks and channel names ignore character case and can be displayed in misleading/inprecise ways in the client.
More random examples of [recv-regexp-filters], incl. more advanced CNF weirdness:
[recv-regexp-filters]
disregard wordle thread there = ^S+ # pub.general.=w8mk.wordle ::
ignore " wordle " threads everywhere = ^S+ # S+.=w{4}.wordle ::
activity-level bots are annoying = (?i) advanced to level d+[ !]
gif replies of YY in ZZ = (?i)^<YY> # ZZ.S+ :: (-- re:[^n]+n)?[att] .*/imaged.gif?
; ; Advanced stuff: connect multiple regexps via CNF logic (Conjunctive Normal Form)
; ; If key starts with "∧ " (conjunction symbol), it's AND'ed with previous regexp
; ; ¬ (negation) in that prefix inverts the logic, so e.g. "∧¬ ..." is "and not ..."
; ; Disjunction (∨) is the default behavior and doesn't need the (implied) prefix
; ; Any complex logical expression can be converted to such CNF form -
; ; - use calculators like https://www.dcode.fr/boolean-expressions-calculator
Drop welcome msgs in welcome-chans = (?i)^S+ # w+.S*welcomeS* :: .*bwelcomeb.*
∧ but only if they have an exclaimation mark in them somewhere = :: .*!
∧¬ and not from this specific " lut " discord-prefix = ^S+ # lut.
Most channels here are not relevant = ^S+ # myc.
∧¬ except these ones = ^S+ # myc.(announcements|changelog|forum)[. ]
∨ but skip github CI logs there = ^<github> # myc.Pretty much anything can be matched with clever regexps, so CNF-logic stuff like in last examples is seldom useful, but might still be simpler than expressing arbitrary ordering or negation in regexps.
See also match-counters config option to keep track of whether specific rule(s) are still needed/being-used.
Mostly useful for debugging - /who command can resolve specified ID (eg channel_id from protocol logs) to a channel/user/guild info:
/who #123456 - find/describe channel with id=123456./who %123456 - server/guild id info./who @123456 - user id lookup.All above ID values are unique across Discord service within their type.
/who @John·Mastodon - user IRC nick or name/login lookup.
Queries all joined discords for that name, and can return multiple results for same or similar non-unique names. Can be useful to check exact nick/display/login names corresponding to an IRC name, or other user info.
/who *665560022562111489 - translate discord snowflake-id to date/time.
Results of all these commands should be dumped into a server buffer (not into channels), regardless of where they were issued from.
In irc channels corresponding to ones on discord, /topic info command (often works as shortened /t info in clients too) can be used to print more information about linked discord channel and its server/guild.
/t info <username> can also print info on user in that discord (unlike /who @<username> which looks the name up in all connected discords), for example /t info john will print info for anyone with "john" in the name.
Usernames in these queries can match exact irc name or discord username, in which case that result is returned, or otherwise more general server-side lookup is made, which can return matches in any type of discord name(s) (see People's names on discord for more info on those).
Discord name translation is "mostly" deterministic due to one exception - channels with same (casemapped) IRC name within same server/guild, which discord allows for.
When there is a conflict, chan names are suffixed by .<id-hash> (see chan-dedup-* config options), to allow using both channels through IRC. Renaming conflicting channels on Discord will rename IRC chans to remove no-longer-necessary suffixes as well. Such renames affect thread-channels too.
Note that when channels are renamed (including name conflicts), IRC notice lines about it are always issued in affected channels, and any relevant monitor/leftover channels, topic should be changed to reflect that old-name channel is no longer useful, and posting msgs there should emit immediate warnings about it.
Discord CDN URLs for attachments can end up being quite long with same host, long discord/channel IDs in there, then actual filename, and ?ex=...&is=...&hm=... trail of CDN parameters after that.
Many Linux IRC clients run in Terminal Emulators though, which often support OSC 8 terminal hyperlink standard, so can display clickable links in a much more compact and readable form.
For example, this attachment URL to a Discord CDN:
https://cdn.discordapp.com/attachments/1183893786254905414/1206216641877377024/20240211_My_Cat_Photo.jpg?ex=65db33c9&is=65c8bec9&hm=9c1dbecbfb2f9edf2302ec078f5e62fffa7f8c2f32e5cd6e3563ae25d8a356e1&
Can be displayed in a terminal like this instead: 20240211_My_Cat_Photo.jpg
Ie same as how one would see hyperlinks displayed in a browser.
This is disabled by default, but if you use terminal IRC client that might support those, set terminal-links = yes option in config file or via set command in an #rdircd.control channel to try it out.
Adjacent terminal-links-re and terminal-links-tpl options can be used to control which part of the link to display as its visible name, which terminal-specific escape characters to use, and such customization.
Discord has voice channels, where in addition to text people can talk verbally, share camera or screen capture (aka streaming, screen sharing). IRC protocol does not support anything like this of course, but it can be useful to get notified when someone starts talking, to hop into different discord client (eg open it in a browser), and use these channels from there.
All IRC channels corresponding to discord voice chats automatically get .vc suffix (unless renamed), and get notice messages about voice activity in there, but limited to following events, to avoid being too spammy:
voice-notify-after-inactivity timeout of inactivity (ie since previous voice-status notification there), default = 20 minutes. And with additional rate-limit set by voice-notify-rate-limit-tbf value, to notify about up to 5 events in a row, but otherwise no more often than once in 5 minutes ("token bucket algorithm" is technically how this limit is implemented/works).
If description above sounds confusing, here's config tweaks to remove all limits on voice-activity event notifications - try those, and maybe re-read this section later if they get too spammy (maybe never!):
[discord]
voice-notify-after-inactivity = 0
voice-notify-rate-limit-tbf = 0#rdircd.voice monitor-channel(s) can also be used to only track voice-chat notifications across discords/channels, potentially filtered via "um" command in #rdircd.control or [unmonitor] in ini config(s).
IRC convention is to treat mention of a nickname as a "highlight" - a more notification-worthy event than a regular channel message, so it might be useful if messages in private channels did always highlight the nick for IRC client.
prefix-all-private option can be used for that:
[irc]
prefix-all-private = mynick: Might also be necessary to either join monitor/leftover channels or setup auto-joining channels for new PMs to be received by IRC client at all.
Private chats are not implemented via direct IRC messages for various practical reasons, ie to have everything work via channels, because it works that way on the discord side, they can have multiple users, to list those easily, to query topic/history/etc there, and such stuff.
There is a similar prefix-all option, to add prefix to all messages, if prefix-all-private doesn't go far enough.
By default, [discord] msg-ack=yes enables sending (delayed) ACKs for received messages in private chats, so that discord counts those as read and doesn't send an email notification about them. This can be disabled or adjusted in config file.
Messages blocked by eg [recv-regexp-filters] or received when there are no IRC clients connected don't count.
If IRC client supports IRCv3 typing notifications and has these enabled, rdircd will forward those from discord users/channels by default, which can be disabled by setting typing-interval = 0 in [irc] configuration section, or interval/timeout values can be adjusted there to work better for IRC app.
Separate typing-send-enabled option controls whether typing notifications from IRC are sent to a discord channel. It is disabled by default for privacy reasons, and likely needs to be explicitly enabled in IRC client as well.
Any IRCv3 features like that typing stuff can also be disabled via ircv3-caps option, eg if there're problems with them in rdircd or client.
This should happen by default when discord gateway responds with op=9 "invalid session" event to an authentication attempt, not reconnecting after that, as presumably it'd fail in the same way anyway.
This would normally mean that authentication with the discord server has failed, but on (quite frequent) discord service disruptions, gateway also returns that opcode for all logins after some timeout, presumably using it as a fallback when failing to access auth backends.
This can get annoying fast, as one'd have to manually force reconnection when discord itself is in limbo.
If auth data is supposed to be correct, can be fixed by setting ws-reconnect-on-auth-fail = yes option in [discord] ini section, which will force client to keep reconnecting regardless.
Don't know why or when it happens, but was reported by some users in this and other similar discord clients - see issue-1 here and links in there.
Fix is same as with bitlbee-discord - login via browser, maybe from the same IP Address, and put auth token extracted from this browser into configuration ini file's [auth] section, eg:
[auth]
token = ...See "Usage" in README of bitlbee-discord (scroll down on that link) for how to extract this token from various browsers.
Note that you can use multiple configuration files (see -c/--conf option) to specify this token via separate file, generated in whatever fashion, in addition to main one.
Extra token-manual = yes option can be added in that section to never try to request, update or refresh this token automatically in any way. Dunno if this option is needed, or if such captcha-login is only required once, and later automatic token requests/updates might work (maybe leave note on issue-1 if you'll test it one way or the other).
Never encountered this problem myself so far.
Most likely source of that should be missing handling for some new/uncommon discord events, or maybe a bug in the code somewhere - either can be reported as a github issue.
To get more information on the issue (so that report won't be unhelpful "don't work"), following things can be monitored and/or enabled:
Standard error stream (stderr) of the script when problem occurs and whether it crashes (unlikely).
If rdircd is run as a systemd service, eg journalctl -au rdircd should normally capture its output, but there are other ways to enable logs listed just below.
rdircd shouldn't normally ever crash, as it handles any errors within its own loop and just reconnects or whatever, but obviously bugs happen - there gotta be some python traceback printed to stderr on these.
Find a way to reproduce the issue.
When something weird happens, it's most useful to check whether it can be traced to some specific discord and event there (eg some new feature being used), or something specific you did at the time, and check whether same thing happens again on repeating that.
That's very useful to know, as then problem can be reproduced with any kind of extra logging and debugging aids enabled until it's perfectly clear what's going on there, or maybe how to avoid it, if fixing is not an option atm.
Join #rdircd.debug channel - any warnings/errors should be logged there.
Send "help" (or "h") msg to it to see a bunch of extra controls over it.
Sending "level debug" (or "d") there for example will enable verbose debug logging to that channel (can be disabled again via "level warning"/"w"), but it might be easier to use log files for that - see below.
Enable debug and protocol logs to files.
In any loaded rdircd ini file(s), add [debug] section with options like these:
[debug]
log-file = /var/log/rdircd/debug.log
proto-log-shared = no
proto-log-file = /var/log/rdircd/proto.log /var/log/rdircd dir in this example should be created and accessible only to running rdircd and ideally nothing else, eg creating it as: install -m700 -o rdircd -d /var/log/rdircd
Such opts should enable those auto-rotating log files, which will have a lot of very information about everything happening with the daemon at any time.
Both of these can also be enabled/controlled and/or queried at runtime from #rdircd.debug chan.
proto-log-shared option (defaults to "yes") and be used to send discord/irc protocol logging to same log-file or #rdircd.debug channel, but it might be easier to have two separate logs, as in example above.
Log file size and rotation count can be set via log-file-size , log-file-count , proto-log-file-size , proto-log-file-count options - run rdircd --conf-dump-defaults to see all those and their default values (rdircd.defaults.ini has some recent-ish copy too).
When running with protocol logs repeatedly or over long time, proto-log-filter-ws option can be handy to filter-out spammy uninteresting events there, like GUILD_MEMBER_LIST_UPDATE.
Note that these files will contain all sorts of sensitive information - from auth data to all chats and contacts - so should probably not be posted or shared freely on the internet in-full or as-is, but can definitely help to identify/fix any problems.
Running /version IRC-command should at least print something like host 351 mk-fg 22.05.1 rdircd rdircd discord-to-irc bridge on the first line, which is definitely useful to report, if it's not the latest one in this git repo.
Generally if an issue is easy to reproduce (eg "I send message X anywhere and get this error"), it can be reported without digging much deeper for more info, as presumably anyone debugging it should be able to do that as well, but maybe info above can still be helpful to identify any of the more non-obvious problems, or maybe give an idea where to look at for fixing or working around these.
Some configuration tweaks that I use, or mentioned in #rdircd on IRC and such.
Feel free to suggest any other lifehacks to add here.
Normally rdircd uses these long strange "#rdircd.monitor" channel name templates, as well as unnecessary "#me.chat." prefixes, instead of this:
#DMs
#@some-friend
#@some-friend+other-friend+more-ppl
#rdircd
#rdircd.rest
#rdircd.voice
#rdircd.control
#rdircd.debug
#minecraft
#minecraft.general
#minecraft.modding
#minecraft.rest
Use these lines in any loaded ini config file to make it work like that:
[irc]
chan-monitor = rdircd
chan-leftover = rdircd.rest
chan-monitor-guild = {prefix}
chan-leftover-guild = {prefix}.rest
chan-private = {names}
[renames]
guild.me = DMs
guild.me.chan-fmt = @{name}What these options do, in the same order: rename "#rdircd.monitor" to "#rdircd", set names for all discord-specific monitor channels to just "{prefix}" (eg "#dm" or "#minecraft"), set private-chat channels to use people's name(s) without "chat." prefix, rename default "me" guild (private chats) to "DMs", use simpler @ + name format for any channels there.
Defaults are that way to try to be more explicit and descriptive, but once you know what all these channels are for, can easily rename them to something shorter/nicer and more convenient for yourself.
When message is edited, you normally get something like [edit] new msg text , but it can be ✍️ new msg text or new msg text instead:
[irc]
prefix-edit =
prefix-embed = ?.{}
prefix-attachment = ?️
prefix-uis =
prefix-interact = ?
prefix-poll = ?️.{} Note the "space and backslash" at the end in these options, which is to preserve trailing spaces in values, from both text editors that strip those and configuration file parser (which ignores any leading/trailing spaces, unless punctuated by backslash). prefix-embed and poll values need {} placeholder for where to put short id/tag.
Alternatively, set-command like set irc-prefix-edit '✍️ ' can be used in #rdircd.control to configure and tweak this stuff on-the-fly (or -s/--save into config too).
Unless OSC 8 hyperlinks for terminal IRC clients option is enabled, attachments normally are just a long link with a filename buried in there:
<user> ?️ https://cdn.discordapp.com/attachments/813633048368761786/1313964897464246919/cat-pic.jpg?ex=674e6959&is=674d17d9&hm=2519bb427b1392bce87a0749ed664520d25493e509b8272170a66512f9e143d2&
But same OSC8-formatting feature can be used to get a bit more readable version for eg GUI IRC clients:
<user> ?️ cat-pic.jpg LCak :: https://cdn.discordapp.com/attachments/813633048368761786/1313964897464246919/cat-pic.jpg?ex=674e6959&is=674d17d9&hm=2519bb427b1392bce87a0749ed664520d25493e509b8272170a66512f9e143d2&
Using config like this:
[discord]
terminal-links = yes
terminal-links-emojis = no
terminal-links-tpl = {name} :: {url}("LCak" bit at the end of "cat-pic.jpg LCak" is hash of the link, so that it's possible to tell different "image.jpg" attachments apart at a glance)
Using discord through IRC can be a bit noisy due to edits or spammy notifications ending up in various monitor/leftover channels or other un-irc-like features, which rdircd can help mitigate to some degree, but often doesn't by default, as it's hard to know what other people actually care about.
Here are some random commands to try out in #rdircd.control channel:
um Noise from any bot-channels = re:.bots?(-.*)?$
um Ignore welcome chans = glob:*.welcomes
um Disregard all voice-chat events = glob:*.vc
um Memes belong in a circus = glob:*.memes
um Make food channels opt-in = glob:*.food
um Internet "politics" can get really spammy = glob:*.politic*
um There're probably better places for porn = glob:*.nsfw
rx MEE6 bot-noise anywhere = (?i)^<MEE6>
rx THX discord: people spamming edits = (?i)^<(person1|person2)> #THX.S+ :: [edit]
rx NSC: don't care about deletes = ^S+ #NSC.S+ :: --- message was deleted ::
rx NSC/THX: disable reactions here = ^S+ #(NSC|THX).S+ :: --- reacts:
Enable rule-hit counters to check whether these rules are still relevant later:
set discord-match-counters '1d 2d 4d 1w 2w 1mo 2mo runtime'
With these enabled, running um or rx should show [ rule hits: ... ] under each rule, if there's anything to show (but reset on rdircd restarts!), otherwise it's probably safe to drop unused rules to keep lists more tidy.
Disable "reacts" noise everywhere: set irc-disable-reacts-msgs yes
Remove long, confusing and silly nicknames full of unicode junk:
set discord-name-preference-order 'login'
If even ascii logins of specific users get annoying, use [renames] in config to change those locally (see Local Name Aliases section for more info):
[renames]
user.somereallylongandsillyloginbecausewhynot = bob
user.@ 374984273184829999 = andy Keep threads only as channels, and in #rdircd.leftover.* and such:
set discord-thread-msgs-in-parent-chan no
Don't show voice-chats or "monitor" channels on the /list :
set irc-chan-voice '' set irc-chan-monitor ''
All of these examples are not persistent, just to try them out and see, but all commands used there support -s flag to save changed values to last .ini config file, or it can be done manually as well, if any of these are useful to keep around.
There is a good and well-maintained list of alternative clients here:
There are many alt-clients these days, with a lot of churn among them, and dedicated lists like that are probably best way to discover those.
As mentioned in the "WARNING" section above, Bot vs User Accounts section in API docs seem to prohibit people using third-party clients, same as Discord Community Guidelines. Also maybe against their Discord Developer Terms of Service, but dunno if those apply if you're just using the alt-client.
I did ask discord staff for clarification on the matter, and got this response around Nov 2020:
Is third-party discord client that uses same API as webapp, that does not have any kind of meaningful automation beyond what official discord app has, will be considered a "self-bot" or "user-bot"?
Ie are absolutely all third-party clients not using Bot API in violation of discord ToS, period?
Or does that "self-bot" or "user-bot" language applies only to a specific sub-class of clients that are intended to automate client/user behavior, beyond just allowing a person to connect and chat on discord normally?
Discord does not allow any form of third party client, and using a client like this can result in your account being disabled. Our API documentation explicitly states that a bot account is required to use our API: "Automating normal user accounts (generally called "self-bots") outside of the OAuth2/bot API is forbidden, and can result in an account termination if found."
Another thing you might want to keep in mind, is that apparently it's also considered to be responsibility of discord admins to enforce its Terms of Service, or - presumably - be at risk of whole guild/community being shut down.
Got clarification on this issue in the same email (Nov 2020):
Are discord server admins under obligation to not just follow discord Terms of Service themselves (obviously), but also enforce them within the server to the best of their knowledge?
Ie if discord server admin knows that some user is in violation of the ToS, are they considered to be under obligation to either report them to discord staff or take action to remove (ban) them from the server?
Should failing to do so (ie not taking action on known ToS violation) result in discord server (and maybe admins' account) termination or some similar punitive action, according to current discord ToS or internal policies?
Server owners and admin are responsible for moderating their servers in accordance with our Terms of Service and Community Guidelines. If content that violates our Terms or Guidelines is posted in your server, it is your responsibility to moderate it appropriately.
So unless something changes or I misread discord staff position, using this client can get your discord account terminated, and discord admins seem to have responsibility to ban/report its usage, if they are aware of it.
Few other datapoints and anecdotes on the subject:
Don't think Discord's "Terms of Service" document explicitly covers third-party client usage, but "Discord Community Guidelines" kinda does, if you consider this client to be "self-bot" or "user-bot" at least.
Only thing that matters in practice is likely the actual staff and specific server admins' position and actions on this matter, as of course it's a private platform/communities and everything is up to their discretion.
Unrelated to this client, one person received following warning (2020-01-30) after being reported (by another user) for mentioning that they're using BetterDiscord (which is/was mostly just a custom css theme at the time, afaik):

In September 2021 there was a bunch of issues with people using different third-party clients being asked to reset their passwords daily due to "suspicious activity", raised here in issue-18 (check out other links there too), which seem to have gone away within a week.
At least one person in that issue thread also reported being asked for phone account verification for roughly same reason about a week after that, so maybe "suspicious activity" triggering for 3p clients haven't really gone away.
Cordless client developer's acc apparently got blocked for ToS violation when initiating private chats. This client doesn't have such functionality, but maybe one should be more careful with private chats anyway, as that seem to be a major spam vector, so is more likely to be heavily-monitored, I think.
In the #rdircd IRC channel, a person mentioned that their discord account got some anti-spam mechanism enabled on it, disallowing to log-in without providing a phone number and SMS challenge (and services like Google Voice don't work there), immediately after they've initiated private chat with someone in Ripcord client.
"I contacted support at the time and they just responded that they can't undo the phone number requirement once it has been engaged"
It also seems like Ripcord currently might be trying to mimic official client way more closely than rdircd script here does (where latter even sends "client"/"User-Agent" fields as "rdircd" and appears that way under Devices in User Settings webui), and such similarity might look like Terms of Service violation to Discord (modifying official client), instead of Community Guidelines violation (third-party client), but obviously it's just a guess on my part as to whether it matters.
There are also some HN comments clarifying Discord staff position in a thread here, though none of the above should probably be taken as definitive, since third-party and even support staff's responses can be wrong/misleading or outdated, and such treatment can likely change anytime and in any direction, without explicit indication.
Note: only using this API here, only going by public info, can be wrong, and would appreciate any updates/suggestions/corrections via open issues.
Last updated: 2024-11-26
Discord API docs don't seem to cover "full-featured client" use-case, likely because such use of its API is explicitly not supported, and is against their rules/guidelines (see WARNING section above for details).
It's possible that more recent official OpenAPI spec in discord/discord-api-spec repo has a more complete documentation though.
Discord API protocol changes between versions, which are documented on Change Log page of the API docs.
Code has API number hardcoded as DiscordSession.api_ver, which has to be bumped there manually after updating it to handle new features as necessary.
Auth uses undocumented /api/auth/login endpoint for getting "token" value for email/password, which is not OAuth2 token and is usable for all other endpoints (eg POST URLs, Gateway, etc) without any prefix in HTTP Authorization header.
Found it being used in other clients, and dunno if there's any other way to authorize non-bot on eg Gateway websocket - only documented auth is OAuth2, and it doesn't seem to allow that.
Being apparently undocumented and available since the beginning, guess it might be heavily deprecated by now and go away at any point in the future.
There are some unofficial docs for officially-undocumented APIs and quirks:
Sent message delivery confirmation is done by matching unique "nonce" value in MESSAGE_CREATE event from gateway websocket with one sent out to REST API.
All messages are sent out in strict sequence (via one queue), waiting on confirmation for each one in order, aborting rest of the queue if first one fails/times-out to be delivered, with notices for each failed/discarded msg.
This is done to ensure that all messages either arrive in the same strict order they've been sent or not posted at all.
Discord message-posting API has enforce_nonce parameter (since 2024-02-12), which allows to retry posting messages safely from duplication, but at the moment retries are only performed here on API rate-limiting.
Fetching list of users for discord channel or even guild does not seem to be well-supported or intended by the API design.
There are multiple opcodes that allow doing that in a limited way, none of which work well for large discords (eg 10k+ users).
request_guild_members (8) doesn't return any results, request_sync (12) doesn't work, request_sync_chan (14) can be used to request small slice of the list, but only one at a time (disconnects on concurrent requests).
Latter is intended to only keep part of userlist that is visible synced in the client, doesn't support proper paging through whole thing, and only gets updates for last-requested part with indexes in it - basically "I'm in this guild/channel, what should I see?" request from the client.
Some events on gateway websocket are undocumented, maybe due to lag of docs behind implementation, or due to them not being deemed that useful to bots, idk.
Discord allows channels and users to have exactly same visible name, which is not a big deal for users (due to one-way translation), but still disambiguated irc-side.
Discord emojis like :smile: are handled in multiple different ways:
Looked up among unicode emoji names that work in all discords and translated to a unicode character, eg :smile: to
Can be found in current discord's custom emojis and replaced by a message formatting tag for it, like :debian: to a tag like <:debian:12345> , which discord clients will display as debian logo in a linux-related discord.
If user has Discord Nitro subscription, custom emoji from any discord works in any other discord as well.
rdircd doesn't handle last Nitro case at all (looks-up custom emojis in one discord), while first two cases are distinguished from each other via rdircd.unicode-emojis.txt.gz file (optional/configurable), which has list of all non-custom emojis (~6k of them), pulled from Discord WebUI using extract-unicode-emojis-from-js.py script.
If generic emojis stop working in the future (incorrectly treated as if they're discord-custom ones), due to renames or new additions, that script can be used to update the list of them easily.
Gateway websocket can use zlib compression (and zstd in non-browser apps), which makes inspecting protocol in browser devtools a bit inconvenient.
gw-ws-har-decode.py helper script in this repo can be used to decompress/decode websocket messages saved from chromium-engine browser devtools (pass -h/--help option for info on how to do it).
Run ./rdircd --test for info on some extra development/testing helper commands.
dev-cmds = yes under [debug] also enables some runtime helpers in #rdircd.control.
Adding support for initiating private chats might be a bad idea, as Cordless dev apparently got banned for that, and since these seem to be main spam vector, so more monitoring and anomaly detection is likely done there, leading to potentially higher risk for users.