Element-web: Terapkan paket stiker

Dibuat pada 14 Jan 2017  ·  52Komentar  ·  Sumber: vector-im/element-web

Saya ingin menambahkan dukungan untuk paket stiker ke Riot. Karena ini akan melibatkan penulisan banyak kode, saya menulis dokumen kecil ini sehingga kita bisa mendiskusikannya sebelum saya menghabiskan waktu lama untuk itu. Yang mengatakan, sementara saya ingin mendapat bantuan, saya senang menerapkan ini sendiri.

Mengapa paket stiker?

Sebagian besar teman saya menggunakan Telegram sebagai klien obrolan pilihan mereka. Ini tidak ideal karena beberapa alasan, dan saya ingin mereka beralih. Ini mungkin tampak konyol, tapi saya cukup yakin faktor pengunci terbesar ada stiker. Sistem stiker Telegram benar-benar apik, dan menggunakan apa pun tanpanya atau yang serupa terasa seperti penurunan versi nyata. Terkait, saya telah membingkai sebagian besar ini dibandingkan dengan sistem stiker Telegram.

Apa yang membuat paket stiker bagus?

Saya akan mengklaim bahwa fitur yang paling penting adalah:

  • Dapat dibuat oleh pengguna: Ini bagus di beberapa level. Ini menghemat pekerjaan di sisi pengembang, jelas. Tetapi lebih dari itu, ini memungkinkan orang membuat stiker untuk minat khusus mereka.

  • Mudah dikirim: Stiker tidak akan digunakan jika tidak nyaman untuk melakukannya.

  • Mudah disalin: Hampir semua stiker yang saya gunakan, saya miliki karena saya melihat satu yang saya suka, dan saya menambahkannya ke koleksi saya. Telegram membuat proses ini sepele.

  • Dikelompokkan: Sebagian alasan stiker menyebar dengan sangat efektif adalah karena jika saya melihat stiker yang saya suka dan menambahkannya ke koleksi saya, saya mendapatkan banyak stiker lain yang mungkin akan saya nikmati.

Hasil yang ideal adalah lingkungan di mana stiker dapat dengan mudah
dibuat, dan dengan mudah menyebar di antara orang-orang ketika mereka mengobrol satu sama lain
lainnya.

Apa saja fitur yang bisa kita lakukan tanpanya?

Saya tidak terlalu percaya diri di sini, tetapi:

  • Memperbarui paket. Saat pembuat paket stiker menambahkan stiker baru ke dalamnya, perubahan itu dapat disebarkan ke pengguna yang memiliki paket tersebut, atau tidak. Saya cenderung tidak mendukung itu, sebagian besar karena alasan kesulitan implementasi. Orang bisa membayangkan memiliki paket stiker yang melabeli dirinya sendiri sebagai pengganti yang lain, dan memudahkan untuk mengganti yang lama jika pengguna menambahkan paket stiker baru, tapi itu mungkin tidak perlu dalam versi awal.

Penerapan

Saya mengusulkan implementasi khusus di sini sebagai bukti konsep, tetapi saya akan senang melihatnya ditingkatkan. Sebagian besar saya ingin berdiskusi tentang ini sehingga saya tidak menghabiskan waktu lama mengimplementasikan ini dan kemudian menolaknya.

Tujuan desain dengan implementasi adalah:

  • Bekerja sepenuhnya di dalam matriks: tidak ada server eksternal.

  • Hindari perubahan pada protokol matriks.

  • Hindari mengharuskan server rumah untuk mengetahui tentang stiker.

  • Hindari pesan yang tidak standar.

Desain ini mencapai tiga yang pertama. Untuk mengizinkan berlangganan paket stiker, yang keempat dikompromikan dengan menambahkan bidang khusus ke pesan gambar saat stiker dikirim.

Paket stiker adalah arsip yang berisi satu atau lebih gambar (stiker), dan file metadata. Metadata akan mengaitkan setiap stiker dengan nol atau lebih emoji, dan berisi nama paket stiker. Itu juga akan berisi informasi apa pun yang saya lupa penting. Karena kemungkinan besar kami tidak akan mengetahui sebelumnya informasi apa yang penting, kami dapat membuat versi spesifikasi dan menyimpan versi dalam file metadata. Tidak jelas format file apa yang harus didukung: itu mungkin tergantung pada bagaimana gambar sebaris bergetar (walaupun ini dapat dilakukan dengan berbagi gambar standar sampai saat itu).

Untuk menerbitkan paket stiker, seseorang akan:

  • Buat arsip ini (idealnya dibantu oleh klien, tetapi dapat dimulai sebagai proses manual).

  • Unggah paket stiker ke server rumah Anda. URI MCX yang dihasilkan memungkinkan pengguna lain untuk berlangganan (istilah yang menyesatkan, karena tidak mungkin memperbarui paket stiker) ke paket stiker.

Untuk berlangganan paket stiker, klien akan:

  • Unduh paket menggunakan URI paket.

  • Simpan URI di konfigurasi klien. Ini membuat berlangganan paket stiker aa per pengguna, bukan urusan per perangkat.

Saat menggunakan paket, klien akan:

  • Periksa untuk memastikan semua paket stiker di konfigurasi klien ada secara lokal. Ini termasuk menghapus paket stiker yang telah berhenti berlangganan.

  • Izinkan pengguna untuk dengan mudah menelusuri dan mengirim stiker dalam paket stiker.

  • Saat mengirim stiker, sertakan URI paket stiker dalam pesan. Ini memungkinkan pengguna lain untuk melihat pratinjau dan berlangganan paket stiker lainnya.

  • (Ini dapat ditambahkan terlambat) Jika pengguna memulai pesan dengan emoji, tampilkan semua stiker yang diindeks oleh emoji itu.

Tahapan

Saya pikir cara alami untuk memecah ini menjadi sub-tugas, yang masing-masing
dapat dilaksanakan secara terpisah, yaitu:

  1. Terapkan pengiriman paket stiker (dibuat secara manual) dari penyimpanan lokal. Ini agak mirip dengan proposal Gregoor untuk edisi 2648. Saya akan dengan senang hati berkoordinasi dengan mereka dalam hal ini.

  2. (Ini tidak memblokir apa pun, itu hanya harus datang setelah 1) Menerapkan UI untuk membuat paket stiker.

  3. Sinkronkan paket stiker pengguna melalui konfigurasi klien.

  4. Saat menggunakan stiker dari paket, lampirkan tautan ke paket stiker.

  5. Buat UI untuk berlangganan paket stiker yang Anda lihat.

feature meta p2

Komentar yang paling membantu

@schiessle dengan mengingat bahwa saya adalah pengembang proyek pihak ke-3, Dimension (https://github.com/turt2live/matrix-dimension) memungkinkan Anda mengimpor paket dari Telegram untuk digunakan di Riot/Matrix.

Semua 52 komentar

Ayo lakukan.

Lihat komentar saya di https://matrix.to/#/!blHeuKmYNNfIqDlWGO :matrix.org/$14844481771476529 VOaQj:matrix.org

Beberapa detail yang tessgadwa dan saya hash melalui obrolan (semuanya ada di tautan di atas, jadi Anda bisa membacanya di sana jika mau).
Stiker harus 512x(<=512) sebaliknya (satu dimensi 512, satu <=512) png, atau grafik vektor (svgs?).
Stiker dapat dikaitkan dengan emoji. Ini secara implisit membutuhkan kemampuan untuk mengenali emoji. tampaknya paling sederhana untuk mendukung proses konversi Emoji One (di mana jika Anda mendapatkan emoji dan tidak ada yang lain dalam pesan, itu akan mengubahnya menjadi emoji yang lebih besar).
Kami juga membahas pembuatan beberapa paket stiker default, yang tertarik untuk dilakukan oleh tessgadwa (selain pekerjaan UI untuk langkah 2 dan 5). Paket stiker sekitar 12 stiker, idealnya termasuk yang menyampaikan: senang, bosan, sedih, marah, penasaran, perayaan, ucapan selamat, geli. (Ini cukup off the manset sekalipun).

Beberapa diskusi lagi di sini . Kami cukup siap untuk tahap 1 seperti yang dijelaskan di atas.

Disarankan agar kami menemukan format paket stiker yang ada dan gunakan saja. Satu-satunya hal yang dapat saya temukan adalah apel di sini . Saya agak enggan menggunakannya, karena mendukung banyak fitur yang mungkin tidak kita inginkan (stiker animasi, misalnya), serta tidak mendukung beberapa fitur yang seharusnya (emoji). Saya pikir format json sederhana di sepanjang baris:

{
    "name" : "Goats with sunglasses"
    "author" : "Nunya Business"
    "stickerpack spec version" : 1.0
    "stickers" [
        {
            "file" : "evilGoat.svg"
            "emoji" : "😈🔥"
        },
        {
            "file" : "similingGoat.png"
            "emoji" : "😊"
        },
        {
            "file" : "nondescriptGoat.png"
            "emoji" : ""
        }
    ]
}

akan jauh lebih mudah.

Kami membahas tempat menyimpan paket, dengan rencana tentatif untuk menggunakan mxc untuk saat ini. Pilihan lain termasuk IPFS, beberapa situs web, atau hash torrent. Kami mungkin ingin memiliki situs web eksternal untuk mencari paket stiker juga di beberapa titik.

Ini bekerja untuk saya.

bagaimana bidang emoji dimaksudkan untuk digunakan di sini?

Jika pengguna memulai pesan dengan emoji, tampilkan semua stiker yang diindeks oleh emoji tersebut. Karena stiker digunakan kurang lebih dalam konteks yang sama dengan emoji, menunjukkan stiker yang relevan saat Anda mengetik emoji bisa sangat berguna

Saya juga memperhatikan bahwa ketika saya menggunakan emojii Riot bawaan, saya hanya mendapatkan 8 emojii yang muncul. Apakah ini standar?

Artis potensial untuk dihubungi disarankan: http://www.deviantart.com/art/Phil-The-Owl-629856759

Diskusi bagus tentang di ruang utama Riot hari ini tentang pengunggahan gambar vs paket stiker.

Tujuannya adalah untuk memungkinkan pengguna mengakses kumpulan paket stiker umum langsung dari aplikasi tanpa harus mengunggahnya sendiri setiap kali dari hard drive.

Tujuan besar lainnya: Menciptakan cara bagi artis untuk mengunggah/membagikan stiker di bawah lisensi CC untuk disertakan dalam Riot.

Saat ini berpikir kita hanya harus mengkodekan base64 gambar dan menempelkannya di file json secara langsung. Agak tidak efisien (4/3), tetapi dengan begitu kita tidak perlu menambahkan ketergantungan pada beberapa library tar atau menyimpan setiap stiker secara terpisah di server.

@rocurley kerugian dari melakukan itu adalah Anda tidak berakhir dengan URL kanonik untuk masing-masing gambar, yang akan mendorong klien untuk pergi dan mengeluarkan base64 dari JSON dan terus mengunggahnya dalam rangkap dua ke HSes mereka. Idealnya HS harus menghapus duplikat konten, tetapi sayangnya saat ini sinapsis tidak. Sedangkan jika Anda mereferensikan bit karya seni yang sebenarnya sebagai URL mxc:// yang terpisah, mereka akan secara otomatis dideduplikasi. Dan klien tidak perlu repot mengunggah ulang saat mereka mengirimnya?

@ara4n Itu jelas merupakan keuntungan dari menyimpannya secara terpisah. Perhatian utama saya adalah stiker individu dihapus. Jika Anda hanya memiliki satu file, kemungkinan kecil itu akan terjadi. Saya masih belum memiliki model yang bagus untuk seberapa besar kemungkinan file akan dihapus.

Juga perlu diketahui: Bagaimana cara kami menyimpan paket stiker secara lokal? Saya berencana mengambilnya dari homeserver saat startup setiap saat untuk saat ini, tetapi saya tidak menyukai opsi itu. Saya melihat ke penyimpanan lokal, tetapi 5Mb tidak terlalu banyak.

Saya baru saja men-cache stiker menggunakan caching HTTP normal di klien (di
setidaknya untuk huru-hara-web); itu harus bekerja dengan baik :)

Dalam hal konten yang dihapus - selalu ada risiko
bahwa konten sumber dihapus, apakah itu salinan master atau salah satu dari
satu juta duplikat. Untuk saat ini saya benar-benar mengabaikannya; praktis
orang-orang yang berbicara di Matrix hampir tidak pernah kedaluwarsa konten MXC (dan bahkan jika
mereka melakukannya, itu hanya cache jarak jauh mereka), dan di masa mendatang beralih ke
sesuatu seperti ipfs akan membuatnya hilang.

Baiklah, sgt.

baik.

Pada Jumat, 20 Jan 2017 pukul 13:23, Roger Curley [email protected]
menulis:

Baiklah, sgt.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/vector-im/riot-web/issues/2950#issuecomment-274183468 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AGLNG4ug22IJ86lrUNB3qND-p9ihCvA4ks5rUSXTgaJpZM4Ljr0n
.

--

Tess Gadwa

Pejabat tertinggi Eksklusif


Ya Tepat, Inc. | yesexactly.com | 413.325.8251

satu pemikiran yang dapat membantu di sini: jika kita beralih ke penamaan url mxc berdasarkan hash konten maka deduplikasi menjadi sepele, seperti halnya memperbaiki dan mengenali konten jika konten asli entah bagaimana dihapus... lihat juga https://github.com /matrix-org/matrix-doc/issues/446 dan https://github.com/matrix-org/matrix-doc/issues/539

@rocurley apakah ini berhasil?

Maaf, tidak punya banyak waktu untuk ini selama beberapa minggu terakhir. Seperti berdiri, Anda dapat mengirim stiker jika Anda telah membuat dan menambahkannya secara manual (dengan http buatan tangan artisinal). Bekerja di UI untuk membuat paket stiker sekarang.

Dingin. Beri tahu saya jika UI sudah siap.

@ara4n sejauh ini kami memiliki kode untuk mengirim stiker dari paket. Mekanisme untuk menambahkan paket (membuat sendiri atau menambahkan paket yang telah Anda lihat) masih dalam proses. Saya ingin mendapatkan beberapa tinjauan kode sebelum itu, sebelum kita membangun terlalu banyak pada sesuatu yang banyak dimodifikasi. Masalahnya adalah bahwa itu tidak benar-benar dapat digabungkan saat ini: Kami akan menambahkan tombol stiker yang pada dasarnya tidak dapat digunakan oleh siapa pun. Itu tidak akan benar-benar dapat digunakan sampai kita memiliki pembuat paket stiker yang berfungsi, atau satu set paket stiker yang disertakan secara default (walaupun itu akan jauh lebih mudah untuk dibuat jika kita memiliki pembuat paket stiker yang berfungsi). Idk apa solusi terbaik di sini: Saya bisa membuat PR tiruan?

@rocurley di mana dalam repo seseorang akan mengunggah stiker sampel untuk digunakan dalam pengujian?

@tessgadwa Jujur mungkin hal termudah adalah mengirim mereka melalui kerusuhan (untuk menghasilkan url mxc). Itu akan membuatnya cukup mudah untuk mengumpulkan satu paket.

Hai @rocurley, saya mengirimi Anda beberapa bahan mentah. Mungkin bukan yang Anda cari, tetapi jika Anda memerlukan file gambar tertentu, ada banyak lagi di bawah lisensi CC (tanpa atribusi) di Gambar Google.

@tessgadwa Autocomplete dikonfigurasi untuk hanya menampilkan 8 yang paling relevan, tetapi ada lebih banyak lagi.

@aviraldg bagaimana kita menentukan relevansi?

@tessgadwa Pencocokan string fuzzy, dan sekarang pencocokan substring. Saya akan mencari cara untuk menambahkan pemilih emoji nanti, yang mungkin bisa menangani ini juga. Bagaimanapun, saya telah terlibat dengan menulis ulang komposer sehingga saya mungkin dapat membantu bagian UI dari masalah ini.

@aviraldg itu fantastis. Apakah kode saat ini berada di repo Riot utama?

Saya juga berpikir mungkin berguna untuk menampilkan stiker berdasarkan Kategori. Tapi sebenarnya saya pikir salah satu atau keduanya bisa bekerja.

@rocurley , seberapa dekat kita mendapatkan mxc URL dengan stiker ke Riot? Komposer pesan baru perlu dimodifikasi sedemikian rupa sehingga pengguna dapat mencari stiker, tetapi kami harus melakukan beberapa perubahan yang memungkinkan pengiriman <img src="mxc://..."/> sewenang-wenang dalam pesan segera.

Ada kemajuan dalam hal ini?

@lboklin para

Saya agak menjatuhkan ini beberapa waktu lalu, setelah saya tidak dapat menemukan cara untuk mendapatkan ulasan kode tentang apa yang saya miliki sejauh ini (saya tidak ingin melempar batu di sini: Saya yakin semua orang sibuk, dan saya' saya tidak terlalu akrab dengan proses di sini). Jika kita bisa mendapatkan tinjauan kode dari pekerjaan sejauh ini, saya ingin terus mengerjakan ini. Saya tidak dapat menjamin proses yang cepat (saat ini banyak waktu saya dihabiskan untuk mencari pekerjaan), tetapi saya masih tertarik dengan fitur ini.

hm, saya mungkin akan gila, tapi saya rasa saya belum pernah melihat kode untuk ini? Apakah ada PR atau cabang di suatu tempat yang harus saya ketahui?

https://github.com/rocurley/riot-web/tree/develop
https://github.com/rocurley/riot-web/tree/develop

Sudah lama dan TBH saya tidak tahu bagaimana saya mencoba mengomunikasikan ini kepada Anda.

@rocurley Anda harus menekan tombol "permintaan tarik baru" di atas halaman utama garpu Anda di github.

Hai! Apakah ada versi uji coba Riot dengan kesempatan untuk bertukar stiker? Atau masih belum dilaksanakan?

@psyapathy Itu belum diimplementasikan, dengan pengembang utama bekerja untuk menstabilkan widget dan mengimplementasikan komunitas.

@lukebarnard1 Sedih... Dan kemudian ada implementasi pemilih Emoji di klik? Untuk mengklik tombol dan mendapatkan daftar lengkap Emoji?

@psyapathy ada masalah untuk itu di suatu tempat. Ini bukan tempat untuk diskusi, lebih baik menyodok kami di #riot

Jadi PR asli sepertinya macet, tapi kami berharap bisa melakukannya sebagai bagian dari Widget dalam waktu yang relatif dekat. Akan membuat bug ini terbuka untuk nilai historis, dan bertindak sebagai pelacak untuk widget paket stiker yang akan datang.

Saya perhatikan ada beberapa integrasi pemetik stiker dalam kerusuhan baru-baru ini. Apakah ada pembaruan baru untuk masalah ini?

Integrasi tampaknya telah diterapkan dalam pengembangan, tetapi tidak ada tombol stiker yang sebenarnya muncul saat ditambahkan.

Apakah Anda mengaktifkannya di Pengaturan Pengguna > Labs?

Stiker telah hadir sebagai fitur "Labs" di cabang develop .

@lboklin Anda lebih baik bertanya di # riot:matrix.org atau membuka edisi baru. Tapi ya, seperti yang dikatakan @t3chguy , pastikan Anda telah mengaktifkan tanda fitur di pengaturan pengguna.

Saya tidak! Ini berfungsi setelah mengaktifkannya di sana.

Oke, jadi sekarang kita punya stiker di Riot/Matrix :)

Apa delta (dari sudut pandang pengguna) antara impl kami dan diskusi asli ini?

  • Dapat dibuat pengguna : tidak sepele. Pengguna dapat membuat stiker dan mengirimkannya kepada kami untuk dihosting, atau dihosting di instans Dimensi pribadi mereka sendiri, tetapi itu bukan sesuatu yang semua orang akan mampu/tertarik untuk lakukan/mau lakukan
  • Mudah dikirim : :heavy_check_mark:
  • Mudah disalin : tidak juga. Saat Anda melihat stiker yang diposting orang lain, tidak ada tautan mudah untuk menambahkan paket stiker itu ke koleksi Anda sendiri
  • Dikelompokkan : :heavy_check_mark:
  • Memperbarui paket : :heavy_check_mark:
    Kami mendapatkan ini 'gratis' dengan impl yang dipilih (untuk menambahkan stiker baru, tidak memodifikasi stiker yang ada di tempat)

Apakah ada rencana untuk paket yang dapat dibuat pengguna? Cara telegram melakukannya adalah melalui bot yang Anda pesan, tetapi saya membayangkan membuat webUI atau halaman khusus dalam kerusuhan karena mungkin lebih mudah digunakan.

Paket stiker buatan pengguna (kustom) sedang dalam tahap proposal saat ini: https://github.com/matrix-org/matrix-doc/issues/1256

Saya tidak berpikir ini harus disertakan dalam Riot secara default, melainkan tersedia sebagai plugin.

Akan sangat bagus jika stiker Matrix kompatibel dengan stiker Telegram sehingga saya dapat dengan mudah mengunduh paket stiker Telegram dan menambahkannya ke Matrix.

@schiessle dengan mengingat bahwa saya adalah pengembang proyek pihak ke-3, Dimension (https://github.com/turt2live/matrix-dimension) memungkinkan Anda mengimpor paket dari Telegram untuk digunakan di Riot/Matrix.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat