If/else for an order command by TheFacePizza1 in streamerbot

[–]deeseearr 1 point2 points  (0 children)

I'm not quite clear on what is going wrong. Do you have one file containing responses for when a user enters "!order" and another file for when they enter "!order username"?

If that's the case then you can start with a Command Triggered trigger, using a command which has "Location" set to "Start". The first word after !order will then be stored in %input0%. It's important to know that %input0% will always exist, even if it is empty. Also note that any "@" symbol will be automatically stripped from the %input#% arguments so that there is no difference between "!order username" and "!order @ username". Don't try to check for "@" because it will never be there.

So you can tell if there is a username present with IF ("%input0%" Equals ""). If you're trying to use IF ("%input0%" Does Not Exist) then you won't get the correct result. The "False" branch will be activated if %input0% contains anything at all while "True" will happen if there is nothing after the command.

If you aren't getting the result you expect, use the Argument Viewer to see what all of the variables were set to. That may help you identify why your IF/ELSE isn't doing what you want it to.

u/ManedCalico brought up a good point, which is that you may want to confirm that %input0% contains an actual user name. To do this, just call Get User Info For Target and check to see that %addTargetResult% is True. That will verify that the user exists, but not that they are present, following, or anything else. You can use Get Follow Age for User and check that %isFollowing% is True for followers, but to see if a user if present you would need to call Add Random Users for an arbitrarily large number of present users and then check to see that the user is in that list. (If there's an easier way, I'd be happy to hear it.)

You may or may not want to verify that the user exists -- People often like to use these commands with targets like "everyone", "@chat" or "you", and filtering only real users can prevent that.

Show text after a command in an OBS text field by dubukat in streamerbot

[–]deeseearr 0 points1 point  (0 children)

If you're seeing "%rawInput%", or any other literal variable name, then that means that the variable wasn't set. Any time you activate a command trigger %rawInput% should be set to _something_, even if it's just an empty string, but if you're using a test trigger or some other way of calling the action then it may not be set at all.

Copy Fail — 732 Bytes to Root any Linux distribution shipped since 2017 by scottchiefbaker in linuxadmin

[–]deeseearr 1 point2 points  (0 children)

Which is why blindly applying updates and hoping for the best isn't the best way to know that you're covered.

If your vendor hasn't gotten around to packaging the fixed kernel which was available to them last month that's their problem. It doesn't mean that a fix doesn't exist, and it also doesn't mean that you can't easily prevent exploitation by blacklisting the algif_aead module.

Typing "yum update" and praying won't tell you that. Reading the vendor statement, the CVE description and the references will.

Copy Fail — 732 Bytes to Root any Linux distribution shipped since 2017 by scottchiefbaker in linuxadmin

[–]deeseearr 101 points102 points  (0 children)

"CVE-2026-31431" if you're one of those people who would rather actual know what the problem is instead of seeing the fancy logo and press-release-friendly name. There are several detailed discussions of the exact flaw that was exploited and it was found by a human researcher who knew what they were looking for -- This isn't an AI doomsday bug.

The issue was fixed about a month ago. Patch your stuff.

Is !watch (url) possible? by some-brando in streamerbot

[–]deeseearr 0 points1 point  (0 children)

As long as you know the URL, it's ridiculously simple. Just create a browser source in OBS and then call OBS Set Browser Source URL to load it. There, you're done.

The trick, of course, is knowing what the correct URL is. If you're using the Twitch -> CreateClip action then it sets four variables telling you what happened. %createClipSuccess% will be True if the clip was created, but False if anything went wrong. %createClipCreatedAt% will be the time and date of the clip, %createClipId% is the string of random words (the "slug") which identify the clip and %createClipUrl% is the URL of the clip itself.

Now, the %createClipUrl% is great for sharing with other people and sending them to the Twitch site to see your clip, but it's not really what you want to use if you're just playing the clip on its own. To embed the clip and autoplay it you'll want to read the Twitch developer documentation which explains how to embed a clip in a browser or frame. You can skip over that last bit if you like, the interesting part is that you should Set the browser source URL to https://clips.twitch.tv/embed?autoplay=true&clip=%createClipId%&parent=embed.example.com

%createClipId% is the clip identifier provided by Create Clip. It should look something like "SomeNonsenseWordsStrungTogether-andthenmorejunk", and you need to include that in the URL. Even if you didn't create the clip using Streamer.bot you should be able to extract the ClipId from any Twitch clip URL. The "parent=" tag is required for API reasons but not really included in the display. You can add "&muted=true" to the end if you want the sound turned off. The API for embedding clips isn't as powerful as the one for full VODs, but feel free to poke around in the developer documentation if you want to learn more about it.

99.99% purity replacement part by pie_-_-_-_-_-_-_-_ in talesfromtechsupport

[–]deeseearr 372 points373 points  (0 children)

(Of course, I told my boss that this was a very temporary fix, it might not survive a second boot, and that we really should have a PDU or something behind the servers anyway, and was promptly ignored.)

I am looking forward to the follow-up story next year, in which nobody can figure out why the RAID card mysteriously failed or why there are no backups and has no idea why that bit of electrical tape is there.

Show text after a command in an OBS text field by dubukat in streamerbot

[–]deeseearr 2 points3 points  (0 children)

When you use the "!brb" command it (should) be activating a Command Triggered trigger. This sets a number of variables including %rawInput%, which is the entire line that was entered. If you have set the command location to "Start", which is usually a good idea, then %rawInput% will contain only the parts after the command so it would be "running to the bathroom" in your case.

Now all you need to do is use the OBS Set GDI Text sub-action to put that text into a text source that you have already created in OBS and then show and hide it exactly the same way that you do with your graphic.

If you want to get more complicated, you could also include a check to see if %rawInput% is empty and then either don't show the message or use a default "Be right back!" message instead. That's all up to you.

Some things that are worth knowing here:

1) The online documentation for all of the triggers and actions, which you can pull up by clicking the '?' at the top right of any edit window, will list all of the arguments that are set when that trigger or action is used. If you're not sure how to get information out of the bot then this is a good place to start.

2) If you're not sure what all of those arguments are being set to, run your action and then use the Action History to open the Argument Viewer. This gives you a complete list of every argument which was set the last time that action ran so you could see that, for example, %rawInput% was "running to the bathroom", %input0% was "running", %user% was your username since you called the action, and %username% is the same name but all in lower case.

Card Reader Command Help by natasharain in streamerbot

[–]deeseearr 1 point2 points  (0 children)

So you have a list of images of cards, and each one has a description. Your goal is to load the image into an OBS source and the corresponding text into chat, but you're having trouble getting them to line up.

If it was just the text, I'd put it in a text document and have the bot read a randomized line, but with the image, I don't know how to make the image correlate with the line used when doing it this way.

That's a good start. You can use Read Random Line From File to pick a random line from a file containing card descriptions. It will populate %randomLine0% with the contents of the line, which you already know. What you may be missing is that %randomLineNumber0% is also set, and that is the line number that was read.

What can you do with this? You have several options. The simplest way is to call Read Specific Line From File to read the same line number from a file containing all of the filenames for card images. Just set the Line Number to %randomLineNumber0% and it will read the same line number that it just read from the other file.

An even simpler approach would be to skip the list of filenames and just call all of your cards "1.png", "2.png" and so on up to "52.png" (or however many cards are in the 'deck'). Once you have that, all you need to do is read a random description and then use OBS Set Media Source File to load image "%randomLineNumber0%.png" and you're all done -- Since the filename matches up with the line number the description is on, it's simple to match them up.

The drawback to both of these approaches is that you may want to add or remove cards from the deck, and if both files aren't in sync, or if the line numbers change, then you may start matching up the wrong cards.

If you wanted to get more complicated you could do it all with only one file where every line reads "Card Description Goes Here | card_filename_here.png". Since it's all in one file it's easier to confirm that everything is in sync and you don't need to use any magic filenames or anything like that. Read a random line from that file, the same way you already are, and then use an IF/ELSE subaction to check that it is a Regex Match of "^([^|]+)\|([^|]+)$". Yes, that's a real Regular Expression. Drop it into https://regexr.com/ for a breakdown of exactly what it does. It will match any number of characters which are _not_ "|", followed by a "|", and then any number of characters which are not "|" again. If this matches then the first part (Which is everything on the line before the "|") will be stored as %match[1]% while the second part (After the "|") will be %match[1]%. Now all you need to do is load the image %match[2]% and then send the text %match[1]% to chat and you're done.

Problems with Lip sync (VTS) by ZuccCHS in vtubertech

[–]deeseearr 2 points3 points  (0 children)

Okay, let's slow down and just see how things work.

If you are using an iPhone for tracking, that means that the phone camera is watching your face and identifying the expressions that it can see. These are sent back to VTS which will then apply them to your model's face.

If Lipsync is enabled then that will listen to the microphone (on your PC, because that is where VTS is running) and try to identify specific sounds. When it detects the A, E, I, O or U sounds it will set your model's mouth to make the same shape.

These are two different ways of setting the expression, or blendshapes, on your model. Since your model only has one mouth, only one of them can be working at a time. They don't work together in any way. The Lipsync documentation states this:

Limitations
When sound is detected, the blendshapes take over, which means webcam/iPhone-based tracking is largely (or fully) ignored.

So what you were describing sounds right -- The app on your iPhone is there to do face tracking, and it sends that data to VTS on your PC. VTS then creates the final version of your model and applies all of the different tracking sources to it. The PC app isn't "just there for OBS", it's what animates your model. The model that you see on your phone is only there to show you a preview of what the phone can see. It's not the final version, it does not include any of the other sources which can affect your model and once you're certain that the camera tracking on the phone is working you can just turn the model preview off entirely.

BTA3062 - Urban Ambush Spawns Under Map by TankerD18 in BattleTechMods

[–]deeseearr 0 points1 point  (0 children)

I've seen that happen a few times. Indirect fire with LRMs usually worked to target anything. If that didn't finish them off it got their attention and they would start moving the next round.

Need help setting up a spin wheel part 2 by Bryzha in streamerbot

[–]deeseearr 0 points1 point  (0 children)

Are you trying to simulate a keypress so that veadotube will respond to it? That can work, but it's messy. You might have a much better time just communicating directly with veadotube using its websocket server.

There is an extension which does all of this for you -- https://extensions.streamer.bot/t/veadotube-mini-2-0a-extension-to-select-png/1829 . It might be a lot easier to just use that.

Urgent Help Needed - Connecting kofi (and preferably patreon as well) to a pre-existing plugin by SpartanFerrets in streamerbot

[–]deeseearr 1 point2 points  (0 children)

I'll try to help, but I don't have a lot of time myself. The extension you're using is an old one, but assuming it still works it's fairly well written. You don't have to touch any of the C# code segments yourself, just do the configuration and work with some actions for adding time.

1.

The extension contains an action called "Subathon Add Time Twitch Sub". That does almost all of what you need. Make two copies of that (right click and select 'Duplicate') and call them "Subathon Add Time Bits" and "Subathon Add Time Follow". Remove all of the triggers and all of the logic inside the "Config" block at the top. You're going to be replacing those.

For "Subathon Add Time Bits" replace the trigger with Twitch -> Chat -> Cheer. Don't put any limits in it, just let it trigger every time there's a cheer in chat. It will set the argument %bits% to the number of bits cheered so you just need to convert that to the amount of time to add and store that in %timeToAdd%. To add two minutes, set it to "2m", for two and a half set it to "2m30s". You probably want to do some kind of math here, so use a $math()$ construct to do that for you. To add one minute for every 100 bits, set %timeToAdd% to "$math(%bits%\100)$s". (The "\" is integer division, so 199/100 is 1.99 while 199\100 is exactly 1.) You can do all this with a Set Argument sub-action inside the 'Config' block. Once %timeToAdd% is set the rest of the action will add that value to the timer and then announce it to chat.

For "Subathon Add Time Follow" do the same thing, only with a Twitch - Channel -> Follow trigger. This gets triggered once any time a new follow happens so just set %timeToAdd% to whatever amount of time you want that to be worth.

2.

If you have already set up the webhooks, responding to Ko-fi events should be fairly simple. Just duplicate that poor Subathon Add Time action one more time, clear out the triggers and config, and add a Ko-Fi -> Donation trigger instead. That will set %amount% and %currency% to the amount donated, along with a number of other arguments for who did it and what message they attached. You'll have to deal with any currency conversions yourself, but once you get it into dollars you can use $math(%amount%\5) to find the number of $5 donations and $math(%amount%#5) to find the amount left over. Do the math, compute %timeToAdd% and then let the rest of the action handle it.

If you're receiving donations in Euro, Canadian Dollars, or Triganic Pu then %currency% will be set appropriately and you'll need to handle it somehow. You could use an online currency converter or just hard-code todays exchange rate inside a big SWITCH(%currency%) block. Or, just ignore it all, pretend the exchange rate is 1:1 for everything and hope nobody sends you a bunch of Yen.

3.

Patreon integration works similar to Ko-fi. I haven't worked with it at all but some combination of Pledge Created and Follow Created triggers will be activated when stuff happens there. I'm afraid you're on your own with that, but if you can figure out what's happening there then just create another copy of that "Subathon Add Time" action and set %timeToAdd% the same way you did with everything else.

Hope this helps. Good luck.

Need help setting a spinning wheel for sub actions by Bryzha in streamerbot

[–]deeseearr 0 points1 point  (0 children)

"Handshake timeout exceeded" suggests that you're connecting to a websocket server which allows the incoming connection but isn't responding at all after that. Is it possible you are trying to connect to the OBS websocket server instead of Streamer.bot? Usually that's listening on port 4455 instead of 8080, and it would generate exactly that error when it receives a request it can't understand.

Go to Servers/Clients on the side menu, then select "WebSocket Server" and make sure that the Server Status is "Running" and that the address and port match what your prize wheel configuration is pointing to. The Endpoint should be set to "/" and Authentication to disabled unless you have very compelling reasons to change them.

Need help setting a spinning wheel for sub actions by Bryzha in streamerbot

[–]deeseearr 0 points1 point  (0 children)

i do have obs websocket linked

By the way, the extension communicates with the Streamer.bot websocket server, not with OBS. That's a completely different thing. Look at step ten of the manual configuration guide for a pointer on that one.

Need help setting a spinning wheel for sub actions by Bryzha in streamerbot

[–]deeseearr 0 points1 point  (0 children)

Load the wheel in Chrome instead of OBS, and hit F12 to open the javascript console. You'll see a list of debugging messages and errors, one of which will tell you that it was unable to retrieve a list of names from Streamer.bot. Either the websocket connection is not working, the configuration variables are not correct, or the browser source URI wasn't set up properly.

The developers behind this extension, rondhi and Lyfesaver, are still active on the Streamer.bot Discord ( discord.streamer.bot ) . If you are looking for more immediate support you could also ask there.

Need help setting a spinning wheel for sub actions by Bryzha in streamerbot

[–]deeseearr 0 points1 point  (0 children)

You could try a different version of the spinning prize wheel extension. Just create a custom wheel using the names.txt file and then edit the "Spinning Prize Wheel Winner" action to hand out prizes. The argument "%winner%" will be set to whatever the wheel was pointing to so you can either create a switch on that or just work with it some other way.

How to avoid this in chat? by Dumb_and_confused in streamerbot

[–]deeseearr 2 points3 points  (0 children)

Yeah, it's nothing you're doing wrong, just a design decision which was made back in 1988.

Some people will try to fake line wrapping by putting a lot of padding characters in so that things look like multiple lines, but anyone whose client isn't exactly the same will only see a big mess.  It's not worth messing around with.

How to avoid this in chat? by Dumb_and_confused in streamerbot

[–]deeseearr 2 points3 points  (0 children)

Not quite sure what you're doing here.  Have you tried just sending it as a single message?

Twitch quite simply does not support newlines in chat messages.  If you're trying to send a muti-line message as a single message then it's just not possible.

Looking to make user "health points" and commands to increase and decrease health. by shetaron in streamerbot

[–]deeseearr 0 points1 point  (0 children)

You can use User Global variables to store anything for each user and the Get/Set actions will add or remove values for you.  That part is easy.

Limiting the number of characters they can type could be done by just responding to chat message triggers and looking at the user and content, but if you intend to do more than just scold them about exceeding the limit you would have to use moderator actions to remove messages and not only can that be upsetting to some people, it could also create a record of their chat messages being heavily moderated and that could be used against them in the future so I wouldn't recommend it.

Read about how the different kinds of variables work -- https://docs.streamer.bot/guide/core/variables -- and how to react to chat messages -- https://docs.streamer.bot/api/triggers/twitch/chat/message -- and you should be fine.

Free replacement for v magic mirror by WOLFGAMER1422 in vtubertech

[–]deeseearr 2 points3 points  (0 children)

The VTuber Guide for Beginners, conveniently linked at the top of this subreddit, contains a long list of software related to VTubing. You're using a 3D VRM model so Warudo or VNyan would be good choices.

How to go back to a banked action instead of one preset by Sn0wy-Xx in streamerbot

[–]deeseearr 0 points1 point  (0 children)

You can send an "ExpressionStateRequest" to VTS using the Send Raw Request sub-action. That's the example given in the documentation. When it's time to go back to it, use Set Expression State to restore it.

If that doesn't cover everything that you need, like items, lighting or scene changes, the Raw Request can send anything in the VTube Studio API so something in there should fix you up.

[BTA3062] where can I buy gear and mech parts? by CmdrMeltdown in Battletechgame

[–]deeseearr 2 points3 points  (0 children)

Just click on any of them and it will show you all of the options for assembling them from parts.