(function () {
// 1) Basic bot filter (extend if you like)
function isBot() {
return /(bot|crawl|spider|google|bing|slurp|yandex|facebook|linkedin|pinterest|preview|whatsapp|discord|telegram|headless|puppeteer)/i
.test(navigator.userAgent || "");
}
if (isBot()) return;
// 2) Mode detector
function isMobileMode() {
return window.matchMedia("(max-width: 767px)").matches ||
/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent || "");
}
// 3) Your ad configs (swap keys/sizes to match your network units)
const AD = {
mobile: { key: "aa6d52a6037d0558c2a19dc52b6aa824", width: 320, height: 50 }, // 320x50
desktop: { key: "a49752dcde88f4fde5987d25efbb7168", width: 468, height: 60 } // 468x60
};
// 4) Create container if it doesn't exist
function ensureContainer() {
let container = document.getElementById("ad-container");
if (!container) {
container = document.createElement("div");
container.id = "ad-container";
container.style.display = "none";
document.body.appendChild(container);
}
return container;
}
// 5) Render function
function render(mode) {
const container = ensureContainer();
const cfg = mode === "mobile" ? AD.mobile : AD.desktop;
// Set global atOptions for ad network
window.atOptions = {
key: cfg.key,
format: "iframe",
height: cfg.height,
width: cfg.width,
params: {}
};
// Clear previous ad/script then inject
container.innerHTML = "";
container.style.display = "block";
const s = document.createElement("script");
s.src = `//selfportraitproved.com/${cfg.key}/invoke.js`;
s.async = true;
container.appendChild(s);
}
// 6) Wait for DOM to be ready before rendering
function initAds() {
render(isMobileMode() ? "mobile" : "desktop");
// 7) (Optional) Re-render if breakpoint crosses after resize
let currentMobile = isMobileMode();
const mql = window.matchMedia("(max-width: 767px)");
if (mql.addEventListener) {
mql.addEventListener("change", (e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
} else if (mql.addListener) { // older browsers
mql.addListener((e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
}
}
// 8) Execute when DOM is ready
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initAds);
} else {
initAds();
}
})();
Popular Twitch streamers QTCinderella and Maya Higa are set to host their inaugural streamer award show, dubbed The Streamer Awards, next month. The broadcast is set to premiere on March 12 and QTCinderella recently spoke about the significant cost required to put on the event.
While on stream, the TSM partnered streamer said that due to high costs, the seating and invitations had to be exclusive. “It makes me feel bad because I used to be that 20 viewer Andy that really wanted to get invited to stuff,” QTCinderella said. “I’m really sorry but I do need to know you or you have to be well known in the industry in order to come.”
QTCinderella gave a small glimpse behind the curtain, revealing that the event will cost her approximately $200,000 to put on. With about 200 expected guests, including both nominated streamers and those in the audience, the Twitch streamer expects to spend $1,000 per seat.
The first annual Streamer Awards will be held live from Hollywood on QTCinderella’s Twitch channel. Following all the city’s COVID-19 precautions, QTCinderella hopes to have an in-person audience and a red carpet event prior to the show’s start.
👉 For more insights, check out this resource.
The nomination phase has just finished and voting for the general public has only recently opened. Viewers can go on TheStreamerAwards.com to vote on the 28 total categories available. Voting will conclude six days prior to the event, on March 6.
👉 Discover more in this in-depth guide.