How do I make a custom message recieving hat block

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