Gizlilik
METU Kontenjan Takip · 8 Ekim 2026
Yayıncı ve veriyle ilgili iletişim: Uğur Kılıç — kilic.ugur@metu.edu.tr
Bu bağımsız araç ODTÜ'nün resmî uygulaması değildir. Veriler yalnız ders takibi, isteğe bağlı oturum yenileme ve seçtiğin bildirim bağlantısı için kullanılır. Reklam, veri satışı veya dış analitik yoktur.
1. Cihazında tutulan bilgiler
| Bilgi | Amaç ve saklama |
|---|---|
| Ders kodu, kullanıcı tarafından yazılan ad, section seçimi, sorgu aralığı ve takip durumu | Takibi düzenlemek için Chrome profilinin yerel uzantı depolamasında tutulur. Dil ve kurulum rehberi tercihleri de yereldir. |
| Portal sonuçları | Ders adı, dönem, section ve tabloda varsa öğretim elemanı bilgileri; kapasite ve kullanılan kontenjan değerleri; kontrol zamanları, son sonuçlar ve son 200 değişiklik kaydı yerelde tutulur. |
| Sorgu ve bağlantı tanısı | En çok son 500 sorgunun zamanı, ders kodu, görsel deneme sayısı, aşama sonucu ve süresi; son 30 günün günlük toplamları; panel bağlantı nedenleri ve zamanları. 30 günü aşan tanı kayıtları sonraki işlemde temizlenir. |
| Oturum süresi ölçümü | Son 50 doğrulanmış zaman aşımı/dönüş olayı yerelde tutulur. Güvenilir tamamlanmış aralıkların yaklaşık özeti hesaplanır. Kullanıcı adı, parola veya sayfa içeriği bu ölçüme eklenmez. |
| Tek seferlik değerlendirme hatırlatması | Başarıyla tamamlanan boş yer bildirimlerinin altıya kadar sayısı, mevcut bağlantının dahili kimliği ve davetin kullanılıp kullanılmadığı yerelde tutulur. Puanın veya mağaza bağlantısına tıklaman izlenmez. |
| Görünüm tercihleri | Panelin daraltılmış olup olmadığı, şifrelenmeden yerel localStorage alanında tutulur. Eski sürümlerden kalan, artık kullanılmayan tek seferlik bir bildirim bayrağı da bulunabilir. Bu kayıtlar hesap bilgisi içermez. |
| Geçici çalışma durumu | Seçili portal sekmesi, çerçeve kimlikleri, işlem kilitleri ve sessiz testin kodu/sonucu oturum depolamasında tutulur. Tarayıcı oturumu sona erince silinir. |
Kalıcı yerel kayıtlar — dersler, ayarlar, sonuçlar, geçmiş, giriş/Telegram bilgileri ve oturum ölçümleri — Chrome depolamasına yazılmadan AES-256-GCM ile şifrelenir. Anahtar aynı Chrome profilinin uzantı IndexedDB alanında, dışarı aktarılamayan bir CryptoKey olarak saklanır; her yazıda yeni rastgele IV kullanılır ve kayıt kimliği doğrulanır. Eski yerel kayıtlar doğrulanarak şifreli kayıtlara dönüştürülür. Anahtar veya şifreli kayıt açılamıyorsa düz saklamaya geçilmez. Bu, cihazın veya bütün Chrome profilinin ele geçirilmesine karşı ayrı bir parola kasası değildir.
Chrome Sync kullanılmaz. Görsel doğrulama resmi cihazındaki paketli OCR motorunda geçici olarak işlenir; resim ve altı haneli yanıt tanı geçmişine veya sessiz test kaydına yazılmaz. Tanı geçmişi sürüm, motor hazırlık/okuma süreleri ve sınırlı işlem sayıları içerebilir. Portal metni, mesaj metni, parola, bot token ve Chat ID sorgu tanı kayıtlarına eklenmez. Ders kodunu silmek eski değişiklik geçmişini otomatik silmez. Geçici eşleştirme yetkileri işlem sırasında tarayıcının bellek içi oturum depolamasında tutulabilir.
2. İsteğe bağlı ODTÜ giriş bilgileri
Otomatik oturum yenilemeyi açarsan kullanıcı adı ve parola bu Chrome profilinde yukarıda açıklanan şifreli yerel kayıtlarda saklanır. Çalışırken eklenti bilgileri bellekte açar ve yalnız doğrulanmış ODTÜ SSO giriş formuna iletir; yayıncıya, Telegram'a veya ortak bot servisine göndermez. Parola görünür durum özetlerine, günlük tanıya veya bildirimlere eklenmez.
Giriş bilgileri isteğe bağlıdır. Atlayabilir, daha sonra ayarlardan ekleyebilir veya silebilirsin. Takip ve oturum yenileme açıkken yalnız seçili kapasite sekmesi yaklaşık beş dakikada bir yenilenir; aktif sorgu beklenir. Seçili kapasite bağlantısı iki gözlemde en az 30 saniye boyunca geri gelmezse, aktif işlem bitince daha erken tek yenileme yapılabilir; art arda erken yenilemeler arasında en az beş dakika beklenir. Takip ve otomatik giriş açıkken doğrulanmış ODTÜ giriş formunda kayıtlı bilgilerle sınırlı giriş denemesi yapılır; normal giriş ekranı da desteklenir. Normal giriş, zaman aşımı ölçümü olarak kaydedilmez. Giriş sonrası mevcut portal sekmesinden Course Capacity seçilir. Eklenti çerez değerlerini okumaz veya kaydetmez; portal isteklerinde tarayıcının açık oturumu kullanılır. Ders kodu ve görselden okunan yanıt ODTÜ portalına gönderilir.
3. Ortak Telegram botu
Bu sürüm @metucoursebot ve ortak bağlantı servisi ile yapılandırılmıştır. QR cihazda oluşturulur; botun Telegram adresini ve geçici eşleştirme anahtarını içerir, dış QR servisi kullanılmaz. Kendi özel Telegram sohbetinde Başlat sonrası verilen sekiz rakamlı kod QR oluşturulduktan sonra en fazla 15 dakika geçerlidir ve bir eşleştirmede kullanılır. Kodun kendisi eklentinin kalıcı depolamasına yazılmaz. Botun yönetim tokenı eklentiye dağıtılmaz.
Eklenti sunucuya rastgele kurulum kimliği, eşleştirme isteği/kodu ve kendi bağlantısının bildirim veya iptal isteğini HTTPS ile gönderir. Sunucu Telegram sohbet/kullanıcı kimliğini, ad/kullanıcı adı özetini, eşleşme durumunu ve teslim özetlerini işlev için tutar. Bildirim için ders kodu/adı, dönem, section, kapasite, kullanılan kontenjan ve boş yer sayıları içeren kısa mesaj ile tekrar teslimi önleyen kimlik gönderilir. Mesaj ilk başarılı kontroldeki boş yerleri veya sonraki kapasite değişikliğini özetler. ODTÜ kullanıcı adı/parolası, oturum çerezi, CAPTCHA, portal sayfasının tamamı veya yerel sorgu geçmişi bu servise gönderilmez. Sunucu mesaj metnini kalıcı teslim kaydına koymaz; eşleştirme kodunun gizli anahtarla özeti tutulur. Bağla ve test mesajı gönder düğmesi bir bağlantı testi gönderir.
Eklentinin yalnız kendi bağlantısına bildirim/iptal yetkisi veren anahtarı cihazda şifreli yerel kayıtta saklanır. Eşleşmeyi kaldırma sunucu yetkisini iptal edip kişisel alanları siler; sunucuya ulaşılamıyorsa kaldırma tamamlandı denmez. Etkin eşleşme ve teslim özetleri bağlantı boyunca saklanır. İptal edilmiş kimlik/teslim kayıtları 30 gün sonra; diğer süresi dolmuş veya iptal edilmiş eşleştirme kayıtları son geçerlilikten 24 saat sonra; webhook olay kimlikleri yedi gün, QR oluşturma kota kayıtları son sayaç başlangıcından iki saat sonra, diğer hız sınırı kayıtları iki gün sonra sonraki servis işlemlerinde sınırlı gruplar halinde temizlenir. İptal yeni gönderim yetkisini kapatır; Telegram’a zaten başlamış bir gönderimi geri alamaz. Relay uygulaması istek gövdelerini ve mesaj içeriğini günlükte tutmaz. Altyapı günlüğüne sınırlı teslim tanıları yazılabilir: bildirim/komut akışı, gönderildi/başarısız sonucu, sabit hata kategorisi, HTTP durumu ve teslimin belirsiz olup olmadığı. Bu tanılara URL, tam mesaj, kişisel kullanıcı/sohbet kimliği, parola veya erişim anahtarı eklenmez. Tanı olaylarının bu dağıtıma özgü altyapı saklama süresi doğrulanmamıştır.
Ortak bağlantı servisi Cloudflare Workers üzerinde çalışır ve veritabanı olarak Cloudflare D1 kullanır. Cloudflare’ın belgesine göre D1 kayıtları ve veritabanı nesneleri sağlayıcının yönettiği AES-256 saklama şifrelemesini kullanır. Bu şifreleme, cihazındaki yerel kayıtların şifrelenmesinden ayrıdır; hizmet sağlayıcısının veritabanı, erişim ve yedekleme ayarlarına bağlıdır.
Altyapı, sınırlı teslim tanılarından ayrı olarak istek zamanı, URL/yol, HTTP yöntemi/durumu, IP adresi ve tarayıcı bilgisi gibi metadata kayıtlarını işleyebilir. Workers Logs saklama süresi plana bağlıdır; kullanılan barındırma hizmetlerinin tüm günlük, denetim ve yedek saklama ayarları doğrulanmadığı için bütün altyapı için kesin bir silinme süresi vaat edilmez. Bir eşleştirme veya testin başarılı olması, bütün kullanıcılar için kesintisiz teslim ya da belirli bir kullanıcı sayısına destek garantisi vermez.
4. Kişisel Telegram botu
Kendi botunu Ayarlar → Kendi botun bölümünden bağlayabilirsin; ilk kurulum rehberi ortak botu kullanır. Resimli dört adımlık kendi botunu bağlama rehberi bulunur. Kişisel botun tokenı ve hedef Chat ID şifreli yerel Chrome kayıtlarında tutulur.
Bot bağlantısını hazırla, tokenla Telegram’ın getMe API’sinden botun kullanıcı adını doğrular. Bağla ve test mesajı gönder veya isteğe bağlı Sohbetimi bul işlemi getMe ve getUpdates API’leriyle yalnız güncel geçici kodla eşleşen tek özel insan sohbetini otomatik bulur. Botun ilk en fazla 50 bekleyen güncellemesi geçici olarak cihazda incelenir; eşleşen Başlat veya kod mesajı son 15 dakika içinde gönderilmiş olmalıdır. Birden fazla eşleşen sohbet varsa seçim yapılmaz. Gelen mesajların tamamı veya kullanıcı adları kaydedilmez; webhook, güncelleme filtreleri veya update offset değiştirilmez. Eski bekleyen güncellemeler veya botun başka bir servisteki webhook bağlantısı bulmayı engelleyebilir; bu durumda bağlantı kaydedilmez ve ayrı bir bot kullanılabilir.
Bildirim ve test sırasında token, Chat ID ve mesaj doğrudan Telegram Bot API’ye HTTPS ile gönderilir; ortak relay kullanılmaz. Bekleyen mesajın hedefi şifreli yerel kuyruk kaydıyla tutulur. Özel sohbetteki kullanıcı gönderilen mesajları görebilir; eski sürümden kayıtlı bir grup hedefi varsa grup üyeleri de o hedefe gönderilen mesajları görebilir. Bot bağlantısını kaldırmak yerel yetkiyi siler; Telegram’daki botu veya eski mesajları silmez.
Ortak bottan kişisel bota geçişte önce kişisel hedefe test gönderilir. Aynı geçişin test durumu ve aday bağlantının özeti, yeniden denemede testi tekrarlamamak için cihazda şifreli tutulur; geçiş tamamlanınca silinir. Ortak sunucuya yalnız mevcut bağlantı yetkisiyle iptal etme nedeni ve seçili dil gönderilir; kişisel bot tokenı ve Chat ID gönderilmez. Ortak sunucu bağlantıyı iptal edip kişisel eşleştirme alanlarını temizledikten sonra eski sohbet kimliğini yalnız o isteğin belleğinde kullanarak bir son bağlantı kapanış mesajı göndermeyi dener. Bu mesaj başarısız veya belirsizse otomatik tekrarlanmaz ve bağlantı yeniden açılmaz.
Botumu aç bağlantısı yalnız botun kullanıcı adını ve geçici eşleştirme kodunu taşır; bot tokenını içermez. Bağlantı otomatik olarak yalnız bu güncel kodu gönderen özel sohbetten kurulur; rastgele son mesajın sohbeti seçilmez. Normal kurulum ekranında elle Chat ID girme alanı yoktur.
İsteğe bağlı değerlendirme bağlantısı
Yayımlanmış mağaza bağlantısı yapılandırıldığında, aynı Telegram bağlantısında altı boş yer bildirimi başarıyla tamamlandıktan sonra uygun bir bildirime tek seferlik, isteğe bağlı değerlendirme bağlantısı eklenebilir. Yeni bir Telegram mesajı üretmez; belirli bir puan, değerlendirme zorunluluğu veya ödül yoktur. Test mesajları ve başarısız gönderimler sayılmaz. Ön yayın sürümünde mağaza bağlantısı boş olduğundan bu davet gönderilmez.
5. Dış servisler ve izinler
ODTÜ portalı sorgu ve isteğe bağlı giriş için; Telegram ve yapılandırılmış ortak servis bildirim/eşleştirme için kullanılır. İletimler HTTPS üzerindedir. storage yerel durum, alarms zamanlama, offscreen cihazdaki OCR ve sidePanel Chrome yan paneli içindir. ODTÜ alan adı erişimi yalnız portal işlevlerini sağlar. Eklenti genel gezinme geçmişini toplamaz, tüm sitelere erişim istemez ve dış kod/OCR motoru indirmez. Telegram, ODTÜ ve varsa barındırma sağlayıcısının kendi veri politikaları ayrıca geçerlidir.
6. Kontrol, silme ve destek
Bu eklentinin veri kullanımı Chrome Web Store Kullanıcı Verisi Politikası'nın Sınırlı Kullanım (Limited Use) kurallarına tabidir: veriler yalnız açıklanan ders takibi ve bağlantı işlevlerinde kullanılır; reklam, kredi değerlendirmesi veya veri satışı için kullanılmaz.
Takibi ders anahtarı veya Tümünü durdur ile durdurabilir, ODTÜ giriş bilgilerini ve oturum ölçümlerini silebilir, Telegram bağlantısını kaldırabilir ve bekleyen başarısız bildirimleri yönetebilirsin. Eklentiyi kaldırmak bu kurulumun yerel uzantı verisini siler; sunucudaki ortak bot yetkisini kaldırmak için önce bağlantıyı kesmek gerekir. Telegram'a gönderilmiş mesajlar Telegram'da ayrıca yönetilir.
Yerel depolama, bilgisayarına veya Chrome profiline erişen kişilere karşı ayrı bir güvenlik sınırı değildir. Ortak serviste saklanan bilgiler yalnız bildirimi iletmek, bağlantıyı yönetmek ve kötüye kullanımı sınırlamak için kullanılır; reklam/profilleme amacıyla aktarılmaz. İnsanlar bu verilere yalnız açık destek iznin, güvenlik incelemesi veya hukuki zorunluluk gibi sınırlı gerekçelerle erişebilir.
Destek e-postası ve LinkedIn bağlantısı yalnız sen tıklarsan açılır; ders veya bağlantı bilgileri URL'ye eklenmez. E-posta ile paylaştığın içerik destek talebin için kullanılır. Parola, oturum çerezi veya bot token gönderme.
Privacy
METU Course Capacity Tracker · 8 October 2026
Publisher and data contact: Uğur Kılıç — kilic.ugur@metu.edu.tr
This independent tool is not an official METU application. Data is used only for course tracking, optional session renewal and the notification connection you choose. There are no ads, data sales or external analytics.
1. Information kept on your device
| Information | Purpose and retention |
|---|---|
| Course codes, user-entered names, section selection, query interval and tracking state | Stored in this Chrome profile's local extension storage to operate tracking. Language and setup-guide preferences are local too. |
| Portal results | Course name, semester, sections and any instructor information in the table; capacity and used capacity; check times, latest results and the most recent 200 changes are stored locally. |
| Query and connection diagnostics | Time, course code, image-attempt count, stage outcome and duration for at most 500 recent queries; daily totals for 30 days; panel connection reasons/times. Diagnostic entries older than 30 days are removed on a later operation. |
| Session timing measurements | Up to 50 confirmed expiry/restoration events are stored locally. Reliable completed intervals produce an approximate summary. No username, password or page content is added to these measurements. |
| One-time review reminder | A count of fully acknowledged seat-availability alerts up to six, the current internal connection identifier and whether the invitation was used are retained locally. Your rating and clicks on the store link are not tracked. |
| Presentation preferences | Whether the panel is collapsed is kept in unencrypted localStorage. An unused one-time notice flag from an earlier version may also remain. These records contain no account details. |
| Temporary runtime state | The selected portal tab, frame identifiers, operation locks and silent-test code/results stay in session storage and disappear when the browser session ends. |
Persistent local records — courses, settings, results, history, login/Telegram details and session measurements — are encrypted with AES-256-GCM before being written to Chrome storage. The key stays in this profile's extension IndexedDB as a nonextractable CryptoKey; each write uses a fresh random IV and validates the record identifier. Existing local records are validated and migrated to encrypted records. An unreadable key or encrypted record does not fall back to plaintext storage. This does not create a separate password-vault barrier against someone who controls your device or entire Chrome profile.
Chrome Sync is not used. Verification images are processed temporarily by the packaged OCR engine on your device. Neither images nor six-digit answers are written to diagnostic history or silent-test records. Diagnostic history may include the version, engine preparation/reading durations and bounded operation counts. Page text, message text, passwords, bot tokens and Chat IDs are excluded from query diagnostics. Deleting a course does not automatically delete older change history. Temporary pairing authority may be kept in the browser's in-memory session storage while pairing is in progress.
2. Optional METU login details
If you enable automatic session renewal, your username and password are saved in this Chrome profile's encrypted local records described above. The extension decrypts them in memory while operating and submits them only to the confirmed METU SSO login form, never to the publisher, Telegram or the shared-bot service. Passwords are excluded from visible status summaries, diagnostics and notifications.
Login details are optional. Skip them, add them later in settings or delete them. When tracking and renewal are enabled, only the selected capacity tab refreshes about every five minutes, after active queries finish. If the selected capacity connection does not return across two observations at least 30 seconds apart, one earlier refresh may occur after active work finishes; early refresh attempts are at least five minutes apart. While tracking and automatic sign-in are enabled, a verified METU sign-in form permits a limited sign-in attempt using saved details, including the ordinary sign-in screen. Ordinary sign-in is not recorded as a session-timeout measurement. Course Capacity is selected in the same portal tab after login. The extension does not read or save cookie values; portal requests use the browser's existing session. Course codes and answers read from verification images are submitted to METU.
3. Shared Telegram bot
This release is configured with @metucoursebot and the shared connection service. The QR is generated locally and contains the bot's Telegram link and temporary pairing key; no external QR service is used. After Start in your private Telegram chat, the eight-digit code expires no later than 15 minutes after QR creation and is used for one pairing. The code itself is not saved in persistent extension storage. The bot's management token is never distributed with the extension.
The extension sends a random installation identifier, pairing request/code and its own notification or revocation requests to the service using HTTPS. The server keeps Telegram chat/user identifiers, a name/username summary, binding state and delivery summaries for this functionality. Notifications transmit a short message containing the course code/name, semester, sections, capacity, used capacity and free-seat counts, plus an identifier that prevents duplicate delivery. It summarizes free seats on the first successful check or a later capacity change. METU usernames/passwords, session cookies, CAPTCHA images, full portal pages and local query history are never sent to this service. The server's persistent delivery records do not store message text, and pairing codes are stored as keyed hashes. Connect and send a test message sends a connection test.
A credential allowing only notifications and revocation for your own binding is stored in an encrypted local record on your device. Disconnecting revokes server access and clears personal fields; an unreachable server is not reported as a completed disconnect. Active bindings and delivery summaries persist for the connection's lifetime. Revoked identifier/delivery records are cleaned after 30 days; other expired or cancelled pairing records after 24 hours past expiry; webhook event identifiers after seven days and QR-creation rate records after two hours from their window start and other rate-limit records after two days, in bounded batches on later service operations. Revocation blocks new sends; it cannot recall a send already started with Telegram. The relay does not log request bodies or message content. Limited delivery diagnostics may be emitted to infrastructure logs: notification/command flow, sent/failed outcome, fixed error category, HTTP status and whether delivery is uncertain. These diagnostics exclude URLs, full messages, personal user/chat identifiers, passwords and access credentials. Infrastructure retention for these events in this deployment has not been verified.
The shared connection service runs on Cloudflare Workers and uses Cloudflare D1 for its database. Cloudflare documents provider-managed AES-256 encryption at rest for D1 records and database objects. This encryption is separate from encryption of local records on your device and depends on the hosting provider’s database, access and backup settings.
In addition to limited delivery diagnostics, infrastructure may process request metadata such as time, URL/path, HTTP method/status, IP address and browser information. Workers Logs retention depends on the plan. The hosting services’ full log, audit and backup retention settings have not been verified, so no exact deletion deadline is promised for all infrastructure. A successful pairing or test does not guarantee uninterrupted delivery for all users or support for a specific number of users.
4. Personal Telegram bot
Connect your own bot from Settings → Your own bot; the first-time setup guide uses the shared bot. A four-step illustrated guide to connecting your bot is available. The personal bot token and destination Chat ID are stored in encrypted local Chrome records.
Prepare bot link verifies the bot username through Telegram getMe using your token. Connect and send test message, or the optional Find my chat action, uses getMe and getUpdates to find only the single private human chat matching the current temporary challenge. At most the first 50 pending bot updates are inspected temporarily on your device; the matching Start or code message must be from the last 15 minutes. Multiple matching chats are rejected. Complete received messages and usernames are not retained; webhooks, update filters and update offsets are not changed. Older pending updates or another service’s webhook for that bot can prevent discovery; then no connection is saved and you can use a separate bot.
Notifications and tests send the token, Chat ID and message directly to Telegram Bot API over HTTPS, without the shared relay. Pending messages retain their destination in the encrypted local queue entry. The user in the selected private chat can see delivered messages; if a group destination was saved by an older version, that group’s members can see messages sent to it. Removing a bot connection deletes local authority; it does not delete the bot or old Telegram messages.
Switching from the shared bot first sends a test to the personal destination. The test state and a digest of the candidate connection are kept encrypted on the device to avoid repeating that test during retries; they are removed after the switch completes. Only the revocation reason and selected language are sent to the shared service with the existing connection capability, never the personal bot token or Chat ID. After revoking access and scrubbing personal pairing fields, the service uses the old chat ID only in that request’s memory to attempt one final disconnect notice. Failed or uncertain notices are not automatically resent and do not reopen access.
Open my bot links carry only the bot username and a temporary challenge, never the bot token. The connection is created automatically only from the private chat that sent that current challenge; an arbitrary latest message is never selected. Normal setup has no field for manual Chat ID entry.
Optional review link
When a published store listing is configured, six fully acknowledged seat-availability alerts on the same Telegram connection can make a suitable alert eligible for a one-time, optional review link. It adds no new Telegram message and requires no particular rating, review or reward. Test messages and failed sends do not count. The pre-publication package leaves the listing blank and sends no such invitation.
5. External services and permissions
METU is used for queries and optional sign-in; Telegram and a configured shared service for pairing and notifications. Transfers use HTTPS. storage retains local state, alarms schedules operations, offscreen runs local OCR and sidePanel provides Chrome's side panel. METU host access supports only portal features. The extension does not collect general browsing history, request all-site access or download external code/OCR engines. Telegram, METU and any hosting provider have their own applicable data policies.
6. Controls, deletion and support
This extension's use of data adheres to the Chrome Web Store User Data Policy, including the Limited Use restrictions: data is used only for the disclosed course-tracking and connection features, never for advertising, credit assessment or sale.
Stop tracking with a course switch or Pause all, delete METU credentials and session measurements, disconnect Telegram and manage failed queued deliveries in settings. Uninstalling deletes this installation's local extension data; disconnect the shared bot first to revoke server authority. Messages already sent to Telegram are managed separately in Telegram.
Local storage does not create a separate security barrier against someone with access to your computer or Chrome profile. Shared-service data is used only to deliver notifications, manage connections and limit abuse; it is not transferred for advertising or profiling. Human access is limited to reasons such as your explicit support permission, security investigation or a legal requirement.
Support email and LinkedIn links open only when clicked; course or connection data is not included in the URL. Content you email is used to handle your support request. Do not send passwords, session cookies or bot tokens.