Rust++ Temporary mute

tarynkelley

Retired Staff
Retired Staff
Trusted Member
Nov 14, 2015
575
178
28
Parts Unknown
Commands

/tempmute

Config: Duration of mute

Most of my Mods forget the unmute a player after they muted them.

Is there any way that they get unmuted automatically after time x ?
 

Jakkee

Retired Staff
Retired Staff
Plugin Developer
Jul 28, 2014
1,465
932
113
Australia
Code:
__title__ = 'TempMute'
__author__ = 'Jakkee'
__version__ = '1.0'

import clr
clr.AddReferenceByName("Fougerite")
import Fougerite
MuteTime = 1800000
#1000 = 1 Second
#60000 = 1 Minute
#300000 = 5 Minutes
#1800000 = 30 Minutes
#3600000 = 1 Hour


class TempMute:
    def On_Command(self, Player, cmd, args):
        if cmd == "tempmute":
            if Player.Moderator or Player.Admin:
                if len(args) > 0:
                    target = self.CheckV(Player, args)
                    if target is not None:
                        if not target.Admin or target.Moderator:
                            Data = Plugin.CreateDict()
                            Data["TargetSteamID"] = Player.SteamID
                            Server.GetRustPPAPI().Mute(long(target.SteamID), target.Name)
                            Plugin.CreateParallelTimer("UnMute", MuteTime, Data).Start()
                            Fougerite.Logger.LogWarning(target.Name + " has been muted by " + Player.Name)
                            target.MessageFrom("TempMute", "You have been muted for " + str(MuteTime * 1000) + " seconds")
                            Server.BroadcastFrom("TempMute", target.Name + " has been muted for " + str(MuteTime * 1000) + " seconds by " + Player.Name)
                        else:
                            Player.MessageFrom("TempMute", "You can not mute another staff member!")
                    else:
                        return
                else:
                    Player.MessageFrom("TempMute", "Usage: /tempmute <Player Name>")
            else:
                Player.messageFrom("TempMute", "You are not allowed to use this command!")

    def UnMuteCallback(self, timer):
        timer.Kill()
        Data = timer.Args
        PlayerID = Data["TargetSteamID"]
        Server.GetRustPPAPI().UnMute(long(PlayerID))
        try:
            player = Fougerite.Player.FindBySteamID(PlayerID)
            Fougerite.Logger.LogWarning(player.Name + " has been unmuted!")
            player.MessageFrom("TempMute", "You have been unmuted!")
        except:
            pass

    #Method provided by Spoock. Converted to Python by DreTaX
    def CheckV(self, Player, args):
        count = 0
        if hasattr(args, '__len__') and (not isinstance(args, str)):
            p = self.GetPlayerName(str.join(" ", args))
            if p is not None:
                return p
            for pl in Server.Players:
                for namePart in args:
                    if namePart.lower() in pl.Name.lower():
                        p = pl
                        count += 1
                        continue
        else:
            nargs = str(args).lower()
            p = self.GetPlayerName(nargs)
            if p is not None:
                return p
            for pl in Server.ActivePlayers:
                if nargs in pl.Name.lower():
                    p = pl
                    count += 1
                    continue
        if count == 0:
            Player.MessageFrom("TempMute", "Couldn't find " + str.join(" ", args) + "!")
            return None
        elif count == 1 and p is not None:
            return p
        else:
            Player.MessageFrom("TempMute", "Found " + str(count) + " players with similar a name. Use a more correct name!")
            return None
    #GetPlayerName provided by DreTaX
    def GetPlayerName(self, name):
        try:
            name = name.lower()
            for pl in Server.Players:
                if pl.Name.lower() == name:
                    return pl
            return None
        except:
            return None
Uses rust++ mute/unmute system.
Should work, Not sure if the timer gets cancel on a reload. It will be cancelled on a restart and you'll have to manually unmute the player/s
 
  • Like
Reactions: DreTaX

DreTaX

Probably knows the answer...
Administrator
Jun 29, 2014
4,093
4,784
113
At your house.
github.com
Code:
__title__ = 'TempMute'
__author__ = 'Jakkee'
__version__ = '1.0'

import clr
clr.AddReferenceByName("Fougerite")
import Fougerite
MuteTime = 1800000
#1000 = 1 Second
#60000 = 1 Minute
#300000 = 5 Minutes
#1800000 = 30 Minutes
#3600000 = 1 Hour


class TempMute:
    def On_Command(self, Player, cmd, args):
        if cmd == "tempmute":
            if Player.Moderator or Player.Admin:
                if len(args) > 0:
                    target = self.CheckV(Player, args)
                    if target is not None:
                        if not target.Admin or target.Moderator:
                            Data = Plugin.CreateDict()
                            Data["TargetSteamID"] = Player.SteamID
                            Server.GetRustPPAPI().Mute(long(target.SteamID), target.Name)
                            Plugin.CreateParallelTimer("UnMute", MuteTime, Data).Start()
                            Fougerite.Logger.LogWarning(target.Name + " has been muted by " + Player.Name)
                            target.MessageFrom("TempMute", "You have been muted for " + str(MuteTime * 1000) + " seconds")
                            Server.BroadcastFrom("TempMute", target.Name + " has been muted for " + str(MuteTime * 1000) + " seconds by " + Player.Name)
                        else:
                            Player.MessageFrom("TempMute", "You can not mute another staff member!")
                    else:
                        return
                else:
                    Player.MessageFrom("TempMute", "Usage: /tempmute <Player Name>")
            else:
                Player.messageFrom("TempMute", "You are not allowed to use this command!")

    def UnMuteCallback(self, timer):
        timer.Kill()
        Data = timer.Args
        PlayerID = Data["TargetSteamID"]
        Server.GetRustPPAPI().UnMute(long(PlayerID))
        try:
            player = Fougerite.Player.FindBySteamID(PlayerID)
            Fougerite.Logger.LogWarning(player.Name + " has been unmuted!")
            player.MessageFrom("TempMute", "You have been unmuted!")
        except:
            pass

    #Method provided by Spoock. Converted to Python by DreTaX
    def CheckV(self, Player, args):
        count = 0
        if hasattr(args, '__len__') and (not isinstance(args, str)):
            p = self.GetPlayerName(str.join(" ", args))
            if p is not None:
                return p
            for pl in Server.Players:
                for namePart in args:
                    if namePart.lower() in pl.Name.lower():
                        p = pl
                        count += 1
                        continue
        else:
            nargs = str(args).lower()
            p = self.GetPlayerName(nargs)
            if p is not None:
                return p
            for pl in Server.ActivePlayers:
                if nargs in pl.Name.lower():
                    p = pl
                    count += 1
                    continue
        if count == 0:
            Player.MessageFrom("TempMute", "Couldn't find " + str.join(" ", args) + "!")
            return None
        elif count == 1 and p is not None:
            return p
        else:
            Player.MessageFrom("TempMute", "Found " + str(count) + " players with similar a name. Use a more correct name!")
            return None
    #GetPlayerName provided by DreTaX
    def GetPlayerName(self, name):
        try:
            name = name.lower()
            for pl in Server.Players:
                if pl.Name.lower() == name:
                    return pl
            return None
        except:
            return None
Uses rust++ mute/unmute system.
Should work, Not sure if the timer gets cancel on a reload. It will be cancelled on a restart and you'll have to manually unmute the player/s
It looks good. What I did on Pluton is that I used the DS and used ticks to calculate. What u should do is store the time data in the DS and if it passed then the on plugininit can remove It or something

Sent From My Samsung Galaxy S4
 

PearlJ

Contributor
Contributor
Aug 14, 2014
86
17
8
34
Italy
misternerd.eu
I don't know, I didn't test that plugin but I can do it soon.
Anyway I prefer to have this in Rust++, only for my comfort and utility lol, and I don't think that I am the only.
 

Jakkee

Retired Staff
Retired Staff
Plugin Developer
Jul 28, 2014
1,465
932
113
Australia
I guess. Is there anything wrong with jakkees example?

Sent From My Samsung Galaxy S4
Only thing is reloading or restarting will leave them muted until an admin/moderator unmuted them