How do I make a custom message recieving hat block

look at doBrodcast's source code

That is Javascript, not Snap!

you can emulate it

No, you really can't. Not in this case, anyways.
Trust me, I have modified Snap! to hell and back a multitude of times, I have a bit of knowledge of how the program works internally.

:nerd_face: you can
brodcast
make a true returning hat with the tag block and put it as the input to the brodcast bock i made

{on recv::hat}::hat 
tag: brodcast hat::control 
report <<true>>

brodcast ((on recv::hat) @>) @> @:> ::control

on recv::hat
say [Hello!]

What?

that tag block just prevents it from running when its not called by the brodcast block

There is no tag block

he's saying there's no block in the Snap! editor or any library labeled "tag: broadcast hat," and because you didn't make it a script pic, we have no idea what it's supposed to do

make sure this block of code is secure and then paste it into the console and/or use tampermonkey to run this every session

ezgif-6634308dcac453

to paste into console
SnapSerializer.prototype.loadBlocksModel = function (
    model,
    targetStage,
    forPreview
) { // public - answer a new dictionary of custom block definitions
    // represented by the given already parsed XML Node,
    // forPreview is an optional Boolean flag that prevents customized
    // primitives from being installed when merely previewing the blocks
    // of a library before actually importing them
    var stage, varModel, varFrame, localVarFrame;

    this.scene = new Scene();
    this.scene.targetStage = targetStage; // for secondary block def look-up
    stage = this.scene.stage;
    model.palette = model.childNamed('palette');
    if (model.palette) {
        this.loadPalette(model.palette).forEach((value, key) =>
            SpriteMorph.prototype.customCategories.set(key, value)
        );
    }
    model.removeChild(model.palette);
    this.loadCustomBlocks(stage, model, true); // global
    this.populateCustomBlocks(stage, model, true); // global
    model.local = model.childNamed('local');
    if (model.local) {
        this.loadCustomBlocks(stage, model.local, false); // not global
        this.populateCustomBlocks( stage, model.local, false); // not global
    }
    model.primitives = model.childNamed('primitives');
    if (model.primitives && !forPreview) {
        this.loadCustomizedPrimitives(stage, {children:
            model.primitives.children.filter((def)=>SpriteMorph.prototype.blocks[def.attributes.selector])
            }, targetStage);
            var customSel = {children:
                model.primitives.children.filter((def)=>!SpriteMorph.prototype.blocks[def.attributes.selector])
                }
            this.loadCustomBlocks(stage, customSel, true); // global
            this.populateCustomBlocks(stage, customSel, true); // global
    }
    varModel = model.childNamed('variables');
    if (varModel) {
        varFrame = new VariableFrame();
        this.loadVariables(varFrame, varModel);
    }
    varModel = model.childNamed('local-variables');
    if (varModel) {
        localVarFrame = new VariableFrame();
        this.loadVariables(localVarFrame, varModel);
    }
    this.objects = {};
    stage.globalBlocks.forEach(def => def.receiver = null);
    this.objects = {};
    this.scene = new Scene();
    this.mediaDict = {};
    return {
        global : stage.globalBlocks,
        local : stage.customBlocks,
        data : varFrame,
        localData : localVarFrame
    };
};

then drag this(this is an edge case)

then you can use the blocks that are imported

No? If you're going to use modded Snap, you're entirely on your own here

launch the hats of the specified requirements

??

these blocks

warp{
for each (script) in (call(((my [scripts] ) @>) of (put any sprite here))@:>) {
 if <requirements (script) > { 
launch (script) @:>
}}
}

replace the requirements block with with any check
(optional) replace my scripts with something that gets all the scripts)