But i believe that they still can use jointeam/joinclass command to join.
Line #43: Your usage of EngFunc_FindEntityByString is incorrect, see fakemeta_const.inc. Also i have no idea of why would you want to search for a planted bomb on round start? Do you aware that ent will be always equal to 0?
Line #46: You should cache mapname into a global array.
Line #51-54: You don't even care to check whether player is alive or not.
Line #56: containi doesn't always return true on success. You have to read string.inc or view the function reference. Also map name technically means nothing. To check whether it's a bomb/defuse map you have to check for func_bomb_target entity existence and not for map name prefix.
Line #57: You don't even care to check whether ent is valid or not equal to 0.
Line #67: You don't even care to check whether killer is connected/not equal to 0.
Line #141, 176: There are a cmd_access stock function that should be used insted of such access check.