Three scripts (not tested)
addaction.sqs
_pos = _this select 0
; the pos of where the bomb is supposed to be
_unit = _this select 1
; any unit with a satchel charge
_unit fire ["pipebomb","put","put"]
~1
_bomb = nearestobject [_unit,"pipebomb"]
_bomb setpos _pos
[_bomb,_unit] exec "timer.sqs"
#loop1
? Isnull _bomb : exit
_distance = player distance _bomb
? _distance <= 3 : goto "addaction"
; can change 3 to anything that fits your mission
goto "loop1"
#addaction
_ID = player addaction ["Disarm Bomb","disarm.sqs"]
goto "loop2"
#loop2
? Isnull _bomb : exit
_distance = player distance _bomb
? _distance > 3 : goto "remaction"
; again change 3 to same number as before
goto "loop2"
#remaction
player removeaction _ID
goto "loop1"
timer.sqs
_bomb = _this select 0
_unit = _this select 1
_n = 0
_t = 60
; _t = bomb timer in seconds
#loop
~1
_n = _n + 1
? _n >= _t : goto "boom"
goto "loop"
#boom
_unit action ["TOUCHOFF"]
exit
disarm.sqs
_obj = _this select 0
_player = _this select 1
_ID = _this select 2
? _player != player : exit
_player removeaction _ID
_player playmove "CombatToMedic"
~2
_bomb = nearestobject [_player,"pipebomb"]
deletevehicle _bomb
_player sidechat "Bomb disarmed."
exit