chatbot

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
myromiles
User
Beiträge: 4
Registriert: Freitag 22. Oktober 2010, 10:57

Hi Leute!!
Ich bin ziemlich neu und hab eigentlich ueberhaupt keine ahnung vom Programmieren
nutze aber schon ...zeitlang einen Python chatbot... der leute aus dem chat schmeißt die
sich nicht benehmen koennen und sie auch stumm stellt wenn sie wieder rejoinen
mein frage ist wie mache ich es das der bot noch was sagt wenn die leute rausfliegen rejoinen und stumm gestellt werden..
ich hoffe ihr koennt mir helfen...

Code: Alles auswählen

order_stats = {}
order_obscene_words = [u'alles was sich nicht gehört '....]


def order_check_obscene_words(body):
    body=body.lower()
    body=u' '+body+u' '
    for x in order_obscene_words:
        if body.count(x):
            return True
    return False

def order_check_time_flood(gch, jid, nick):
    lastmsg=order_stats[gch][jid]['msgtime']
    if lastmsg and time.time()-lastmsg<=2.2:
        order_stats[gch][jid]['msg']+=1
        if order_stats[gch][jid]['msg']>3:
            order_stats[gch][jid]['devoice']['time']=time.time()
            order_stats[gch][jid]['devoice']['cnd']=1
            order_stats[gch][jid]['msg']=1
            order_kick(gch, nick, u'-time- message too fast')
            return True
        return False

def order_check_len_flood(mlen, body, gch, jid, nick):            
    if len(body)>mlen:
        order_stats[gch][jid]['devoice']['time']=time.time()
        order_stats[gch][jid]['devoice']['cnd']=1
        order_kick(gch, nick, u'-len- flood *FUCK*')
        return True
    return False
                
def order_check_obscene(body, gch, jid, nick):
    if order_check_obscene_words(body):
        order_stats[gch][jid]['devoice']['time']=time.time()
        order_stats[gch][jid]['devoice']['cnd']=1
        order_kick(gch, nick, u'-obscene- censor of bahasa Indonesia')
        return True
    return False
            
def order_check_caps(body, gch, jid, nick):
    ccnt=0
    nicks = GROUPCHATS[gch].keys()
    for x in nicks:
        if body.count(x):
            body=body.replace(x,'')
    for x in [x for x in body.replace(' ', '')]:
        if x.isupper():
            ccnt+=1
    if ccnt>=len(body)/2 and ccnt>9:
        order_stats[gch][jid]['devoice']['time']=time.time()
        order_stats[gch][jid]['devoice']['cnd']=1
        order_kick(gch, nick, u'-caps- use capital letters')
        return True
    return False
        
def order_check_like(body, gch, jid, nick):        
    lcnt=0
    lastmsg=order_stats[gch][jid]['msgtime']
    if lastmsg and order_stats[gch][jid]['msgbody']:
        if time.time()-lastmsg>60:
            order_stats[gch][jid]['msgbody']=body.split()
        else:
            for x in order_stats[gch][jid]['msgbody']:
                for y in body.split():
                    if x==y:
                        lcnt+=1
            if lcnt:
                lensrcmsgbody=len(body.split())
                lenoldmsgbody=len(order_stats[gch][jid]['msgbody'])
                avg=(lensrcmsgbody+lenoldmsgbody/2)/2
                if lcnt>avg:
                    order_stats[gch][jid]['msg']+=1
                    if order_stats[gch][jid]['msg']>=2:
                        order_stats[gch][jid]['devoice']['time']=time.time()
                        order_stats[gch][jid]['devoice']['cnd']=1
                        order_stats[gch][jid]['msg']=0
                        order_kick(gch, nick, u'-like- repetition of messages')
                        return True
            order_stats[gch][jid]['msgbody']=body.split()
    else:
        order_stats[gch][jid]['msgbody']=body.split()
    return False

####################################################################################################

def order_kick(groupchat, nick, reason):
    iq = xmpp.Iq('set')
    iq.setTo(groupchat)
    iq.setID('kick'+str(random.randrange(1000, 9999)))
    query = xmpp.Node('query')
    query.setNamespace('http://jabber.org/protocol/muc#admin')
    kick=query.addChild('item', {'nick':nick, 'role':'none'})
    kick.setTagData('reason', get_bot_nick(groupchat)+': '+reason)
    iq.addChild(node=query)
    JCON.send(iq)
    
def order_visitor(groupchat, nick, reason):
    iq = xmpp.Iq('set')
    iq.setTo(groupchat)
    iq.setID('kick'+str(random.randrange(1000, 9999)))
    query = xmpp.Node('query')
    query.setNamespace('http://jabber.org/protocol/muc#admin')
    visitor=query.addChild('item', {'nick':nick, 'role':'visitor'})
    visitor.setTagData('reason', get_bot_nick(groupchat)+u': '+reason)
    iq.addChild(node=query)
    JCON.send(iq)
    
def order_ban(groupchat, nick, reason):
    iq = xmpp.Iq('set')
    iq.setTo(groupchat)
    iq.setID('kick'+str(random.randrange(1000, 9999)))
    query = xmpp.Node('query')
    query.setNamespace('http://jabber.org/protocol/muc#admin')
    ban=query.addChild('item', {'nick':nick, 'affiliation':'outcast'})
    ban.setTagData('reason', get_bot_nick(groupchat)+u': '+reason)
    iq.addChild(node=query)
    JCON.send(iq)
    
def order_unban(groupchat, jid):
    iq = xmpp.Iq('set')
    iq.setTo(groupchat)
    iq.setID('kick'+str(random.randrange(1000, 9999)))
    query = xmpp.Node('query')
    query.setNamespace('http://jabber.org/protocol/muc#admin')
    query.addChild('item', {'jid':jid, 'affiliation':'none'})
    iq.addChild(node=query)
    JCON.send(iq)
    
def order_check_idle():
    for gch in GROUPCHATS.keys():
        if GCHCFGS[gch]['filt']['idle']['cond']==1:
            timee=GCHCFGS[gch]['filt']['idle']['time']
            now=time.time()
            for nick in GROUPCHATS[gch].keys():
                if GROUPCHATS[gch][nick]['ishere']==1:
                    if user_level(gch+'/'+nick,gch)<11:
                        idle=now-GROUPCHATS[gch][nick]['idle']
                        if idle > timee:
                            order_kick(gch, nick, u'-idle- silence for about '+timeElapsed(idle))
    threading.Timer(120,order_check_idle).start()
    
####################################################################################################

def handler_order_message(type, source, body):
    nick=source[2]
    groupchat=source[1]
    if groupchat in GROUPCHATS.keys() and user_level(source,groupchat)<11:
        if get_bot_nick(groupchat)!=nick:
            jid=get_true_jid(groupchat+'/'+nick)
            if groupchat in order_stats and jid in order_stats[groupchat]:
                if GCHCFGS[groupchat]['filt']['time']==1:
                    if order_check_time_flood(groupchat, jid, nick):    return
                if GCHCFGS[groupchat]['filt']['len']==1:
                    if order_check_len_flood(900, body, groupchat, jid, nick):    return
                if GCHCFGS[groupchat]['filt']['obscene']==1:
                    if order_check_obscene(body, groupchat, jid, nick):    return
                if GCHCFGS[groupchat]['filt']['caps']==1:
                    if order_check_caps(body, groupchat, jid, nick):    return
                if GCHCFGS[groupchat]['filt']['like']==1:
                    if order_check_like(body, groupchat, jid, nick):    return
                order_stats[groupchat][jid]['msgtime']=time.time()
                
def handler_order_join(groupchat, nick, aff, role):
    jid=get_true_jid(groupchat+'/'+nick)
    if nick in GROUPCHATS[groupchat] and user_level(groupchat+'/'+nick,groupchat)<11:
        now = time.time()
        if not groupchat in order_stats.keys():
            order_stats[groupchat] = {}
        if jid in order_stats[groupchat].keys():
            if order_stats[groupchat][jid]['devoice']['cnd']==1:
                if now-order_stats[groupchat][jid]['devoice']['time']>100:
                    order_stats[groupchat][jid]['devoice']['cnd']=1

                else:
                    order_visitor(groupchat, nick, u'voting rights stripped for previous violations')

            if GCHCFGS[groupchat]['filt']['kicks']['cond']==1:
                kcnt=GCHCFGS[groupchat]['filt']['kicks']['cnt']
                if order_stats[groupchat][jid]['kicks']>kcnt:
                    order_ban(groupchat, nick, u'too many kicks!!!')
                    return

            if GCHCFGS[groupchat]['filt']['fly']['cond']==1:
                lastprs=order_stats[groupchat][jid]['prstime']['fly']
                order_stats[groupchat][jid]['prstime']['fly']=time.time()    
                if now-lastprs<=70:
                    order_stats[groupchat][jid]['prs']['fly']+=1
                    if order_stats[groupchat][jid]['prs']['fly']>4:
                        order_stats[groupchat][jid]['prs']['fly']=0
                        fmode=GCHCFGS[groupchat]['filt']['fly']['mode']
                        ftime=GCHCFGS[groupchat]['filt']['fly']['time']
                        if fmode=='ban':
                            order_ban(groupchat, nick, u'stop flying!!!')
                            time.sleep(ftime)
                            order_unban(groupchat, jid)
                        else:
                            order_kick(groupchat, nick, u'stop flying!!!')
                            return
                else:
                    order_stats[groupchat][jid]['prs']['fly']=0
            
            if GCHCFGS[groupchat]['filt']['obscene']==1:        
                if order_check_obscene(nick, groupchat, jid, nick):    return
            
            if GCHCFGS[groupchat]['filt']['len']==1:    
                if order_check_len_flood(20, nick, groupchat, jid, nick):    return
            
        elif nick in GROUPCHATS[groupchat]:
            order_stats[groupchat][jid]={'kicks': 1, 'devoice': {'cnd': 1, 'time': 1}, 'msgbody': None, 'prstime': {'fly': 0, 'status': 0}, 'prs': {'fly': 0, 'status': 0}, 'msg': 1, 'msgtime': 1}

    elif groupchat in order_stats and jid in order_stats[groupchat]:
        del order_stats[groupchat][jid]
    else:
        pass            

def handler_order_presence(prs):
    ptype = prs.getType()
    if ptype=='unavailable' or ptype=='error':
        return
    groupchat = prs.getFrom().getStripped()
    nick = prs.getFrom().getResource()
    stmsg = prs.getStatus()
    jid=get_true_jid(groupchat+'/'+nick)
    item=findPresenceItem(prs)
    
    if groupchat in order_stats and jid in order_stats[groupchat]:
        if item['affiliation'] in ['member','admin','owner']:
            del order_stats[groupchat][jid]
            return
    else:
        if item['affiliation']=='none':
            order_stats[groupchat][jid]={'kicks': 0, 'devoice': {'cnd': 0, 'time': 0}, 'msgbody': None, 'prstime': {'fly': 0, 'status': 0}, 'prs': {'fly': 0, 'status': 0}, 'msg': 0, 'msgtime': 0}
    
    if nick in GROUPCHATS[groupchat] and user_level(groupchat+'/'+nick,groupchat)<11:
        if groupchat in order_stats and jid in order_stats[groupchat]:
            now = time.time()
            if now-GROUPCHATS[groupchat][nick]['joined']>1:
                if item['role']=='participant':
                    order_stats[groupchat][jid]['devoice']['cnd']=0
                lastprs=order_stats[groupchat][jid]['prstime']['status']
                order_stats[groupchat][jid]['prstime']['status']=now

                if GCHCFGS[groupchat]['filt']['presence']==1:
                    if now-lastprs>300:
                        order_stats[groupchat][jid]['prs']['status']=0
                    else:
                        order_stats[groupchat][jid]['prs']['status']+=1
                        if order_stats[groupchat][jid]['prs']['status']>5:
                            order_stats[groupchat][jid]['prs']['status']=0
                            order_kick(groupchat, nick, u'presence flood!')
                            return

                if GCHCFGS[groupchat]['filt']['obscene']==1:        
                    if order_check_obscene(nick, groupchat, jid, nick):    return
                
                if GCHCFGS[groupchat]['filt']['prsstlen']==1 and stmsg:
                    if order_check_len_flood(200, nick, groupchat, jid, nick):    return

def handler_order_leave(groupchat, nick, reason, code):
    jid=get_true_jid(groupchat+'/'+nick)
    if nick in GROUPCHATS[groupchat] and user_level(groupchat+'/'+nick,groupchat)<11:
        if groupchat in order_stats and jid in order_stats[groupchat]:
            if GCHCFGS[groupchat]['filt']['presence']==1:
                if reason=='Replaced by new connection':
                    return
                if code:
                    if code=='307': # kick
                        order_stats[groupchat][jid]['kicks']+=1
                        return
                    elif code=='301': # ban
                        del order_stats[groupchat][jid]
                        return
                    elif code=='407': # members-only
                        return
            if GCHCFGS[groupchat]['filt']['fly']['cond']==1:
                now = time.time()
                lastprs=order_stats[groupchat][jid]['prstime']['fly']
                order_stats[groupchat][jid]['prstime']['fly']=time.time()
                if now-lastprs<=70:
                    order_stats[groupchat][jid]['prs']['fly']+=1
                else:
                    order_stats[groupchat][jid]['prs']['fly']=0

######################################################################################################################

def handler_order_filt(type, source, parameters):
    if parameters:
        parameters=parameters.split()
        if len(parameters)<2:
            reply(type,source,u'invalid syntax')
            return
        if GCHCFGS[source[1]].has_key('filt'):
            if parameters[0]=='time':
                if parameters[1]=='0':
                    reply(type,source,u'filt time has been disabled')
                    GCHCFGS[source[1]]['filt']['time']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt time has been enabled')
                    GCHCFGS[source[1]]['filt']['time']=1
                else:
                    reply(type,source,u'invalid syntax')
            elif parameters[0]=='presence':
                if parameters[1]=='0':
                    reply(type,source,u'filt presence has been disabled')
                    GCHCFGS[source[1]]['filt']['presence']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt presence has been enabled')
                    GCHCFGS[source[1]]['filt']['presence']=1
                else:
                    reply(type,source,u'invalid syntax')
            elif parameters[0]=='len':
                if parameters[1]=='0':
                    reply(type,source,u'filt len has been disabled')
                    GCHCFGS[source[1]]['filt']['len']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt len has been enabled')
                    GCHCFGS[source[1]]['filt']['len']=1
                else:
                    reply(type,source,u'invalid syntax')
            elif parameters[0]=='like':
                if parameters[1]=='0':
                    reply(type,source,u'filt like has been disabled')
                    GCHCFGS[source[1]]['filt']['like']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt like has been enabled')
                    GCHCFGS[source[1]]['filt']['like']=1
                else:
                    reply(type,source,u'invalid syntax')
            elif parameters[0]=='caps':
                if parameters[1]=='0':
                    reply(type,source,u'filt caps has been disabled')
                    GCHCFGS[source[1]]['filt']['caps']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt caps has been enabled')
                    GCHCFGS[source[1]]['filt']['caps']=1
                else:
                    reply(type,source,u'invalid syntax')    
            elif parameters[0]=='prsstlen':
                if parameters[1]=='0':
                    reply(type,source,u'filt prsstlen has been disabled')
                    GCHCFGS[source[1]]['filt']['prsstlen']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt prsstlen has been enabled')
                    GCHCFGS[source[1]]['filt']['prsstlen']=1
                else:
                    reply(type,source,u'invalid syntax')
            elif parameters[0]=='obscene':
                if parameters[1]=='0':
                    reply(type,source,u'filt obscene has been disabled')
                    GCHCFGS[source[1]]['filt']['obscene']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt obscene has been enabled')
                    GCHCFGS[source[1]]['filt']['obscene']=1
                else:
                    reply(type,source,u'invalid syntax')
            elif parameters[0]=='fly':
                if parameters[1]=='cnt':
                    try:
                        int(parameters[2])
                    except:
                        reply(type,source,u'invalid syntax')
                    if int(parameters[2]) in xrange(0,121):
                        reply(type,source,u'filt fly for '+parameters[2]+u' seconds')
                        GCHCFGS[source[1]]['filt']['fly']['time']=int(parameters[2])    
                    else:
                        reply(type,source,u'no more than two minutes (120 seconds)')
                elif parameters[1]=='mode':
                    if parameters[2] in ['kick','ban']:
                        if parameters[2] == 'ban':
                            reply(type,source,u'flying will be banned')
                            GCHCFGS[source[1]]['filt']['fly']['mode']='ban'
                        else:
                            reply(type,source,u'flying will be kicked')
                            GCHCFGS[source[1]]['filt']['fly']['mode']='kick'    
                    else:
                        reply(type,source,u'invalid syntax')        
                elif parameters[1]=='0':
                    reply(type,source,u'filt fly has been disabled')
                    GCHCFGS[source[1]]['filt']['fly']['cond']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt fly has been enabled')
                    GCHCFGS[source[1]]['filt']['fly']['cond']=1
                else:
                    reply(type,source,u'invalid syntax')
            elif parameters[0]=='kicks':
                if parameters[1]=='cnt':
                    try:
                        int(parameters[2])
                    except:
                        reply(type,source,u'invalid syntax')
                    if int(parameters[2]) in xrange(2,10):
                        reply(type,source,u'autoban after '+parameters[2]+u' kicks')
                        GCHCFGS[source[1]]['filt']['kicks']['cnt']=int(parameters[2])    
                    else:
                        reply(type,source,u'from 2 to 10 kicks')
                elif parameters[1]=='0':
                    reply(type,source,u'filt kicks has been disabled')
                    GCHCFGS[source[1]]['filt']['kicks']['cond']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt kicks has been enabled')
                    GCHCFGS[source[1]]['filt']['kicks']['cond']=1
                else:
                    reply(type,source,u'invalid syntax')
            elif parameters[0]=='idle':
                if parameters[1]=='time':
                    try:
                        int(parameters[2])
                    except:
                        reply(type,source,u'invalid syntax')            
                    reply(type,source,u'autokick idle for '+parameters[2]+u' seconds ('+timeElapsed(int(parameters[2]))+u')')
                    GCHCFGS[source[1]]['filt']['idle']['time']=int(parameters[2])
                elif parameters[1]=='0':
                    reply(type,source,u'filt idle has been disabled')
                    GCHCFGS[source[1]]['filt']['idle']['cond']=0
                elif parameters[1]=='1':
                    reply(type,source,u'filt idle has been enabled')
                    GCHCFGS[source[1]]['filt']['idle']['cond']=1
            else:
                reply(type,source,u'invalid syntax')
                return                    
            DBPATH='dynamic/'+source[1]+'/config.cfg'
            write_file(DBPATH, str(GCHCFGS[source[1]]))
        else:
            reply(type,source,u'something strange happened, report it to the admin of bot')
    else:
        rep,foff,fon=u'',[],[]
        time=GCHCFGS[source[1]]['filt']['time']
        prs=GCHCFGS[source[1]]['filt']['presence']
        flen=GCHCFGS[source[1]]['filt']['len']
        like=GCHCFGS[source[1]]['filt']['like']
        caps=GCHCFGS[source[1]]['filt']['caps']
        prsstlen=GCHCFGS[source[1]]['filt']['prsstlen']
        obscene=GCHCFGS[source[1]]['filt']['obscene']
        fly=GCHCFGS[source[1]]['filt']['fly']['cond']
        flytime=str(GCHCFGS[source[1]]['filt']['fly']['time'])
        flymode=GCHCFGS[source[1]]['filt']['fly']['mode']
        kicks=GCHCFGS[source[1]]['filt']['kicks']['cond']
        kickscnt=str(GCHCFGS[source[1]]['filt']['kicks']['cnt'])
        idle=GCHCFGS[source[1]]['filt']['idle']['cond']
        idletime=GCHCFGS[source[1]]['filt']['idle']['time']
        if time:
            fon.append(u'time is filter for fast messages')
        else:
            foff.append(u'filt time')
        if prs:
            fon.append(u'presence is for frequently change of status ')
        else:
            foff.append(u'filt presence')
        if flen:
            fon.append(u'len is filter for long messages (flood)')
        else:
            foff.append(u'filt len')
        if like:
            fon.append(u'like is filter for suspiciously of identical messages')
        else:
            foff.append(u'filt like')
        if caps:
            fon.append(u'caps is filter for capital letters')
        else:
            foff.append(u'filt caps')
        if prsstlen:
            fon.append(u'prsstlen is filter for long messages on status')
        else:
            foff.append(u'filt prsstlen')
        if obscene:
            fon.append(u'obscene is filter for censor of bahasa Indonesia')
        else:
            foff.append(u'filt obscene')
        if fly:
            fon.append(u'fly is filter for flying (mode '+flymode+u', timer '+flytime+u' seconds)')
        else:
            foff.append(u'filt fly')
        if kicks:
            fon.append(u'kicks is filter for autoban after '+kickscnt+u' kicks')
        else:
            foff.append(u'filt kicks')
        if idle:
            fon.append(u'idle is filter for silence autokick after '+str(idletime)+u' seconds ('+timeElapsed(idletime)+u')')
        else:
            foff.append(u'filt idle')
        fon=u', '.join(fon)
        foff=u', '.join(foff)
        if fon:
            rep+=u'ENABLE\n'+fon+u'\n\n'
        if foff:
            rep+=u'DISABLE\n'+foff
        reply(type,source,rep.strip())


def get_order_cfg(gch):
    if not 'filt' in GCHCFGS[gch]:
        GCHCFGS[gch]['filt']={}        
    for x in ['time','presence','len','like','caps','prsstlen','obscene','kicks','fly','excess','idle']:
        if x == 'excess':
            if not x in GCHCFGS[gch]['filt']:
                GCHCFGS[gch]['filt'][x]={'cond':0, 'mode': 'kick'}
            continue        
        if x == 'kicks':
            if not x in GCHCFGS[gch]['filt']:
                GCHCFGS[gch]['filt'][x]={'cond':1, 'cnt': 2}
            continue
        if x == 'fly':
            if not x in GCHCFGS[gch]['filt']:
                GCHCFGS[gch]['filt'][x]={'cond':1, 'mode': 'ban', 'time': 60}
            continue
        if x == 'idle':
            if not x in GCHCFGS[gch]['filt']:
                GCHCFGS[gch]['filt'][x]={'cond':0, 'time': 3600}
            continue
        if not x in GCHCFGS[gch]['filt']:
            GCHCFGS[gch]['filt'][x]=1

register_message_handler(handler_order_message)
register_join_handler(handler_order_join)
register_leave_handler(handler_order_leave)
register_presence_handler(handler_order_presence)
register_command_handler(handler_order_filt, 'filt', ['admin','muc','all'], 20, 'Enable or disable certain filters in a conference.\ntime is a filter of time\nlen is a filter of quantitative messages\npresence is a filter of presence\nlike is a filter of identical messages\ncaps is a filter of сaps (CAPITAL letters)\nprsstlen is a filter of long status messages\nobscene - filter of censor bahasa Indonesia\nfly is a filter of flying (frequent in/out in conference), it has two modes  kick or ban, timer 0 to 120 seconds\nkicks is autoban after N kicks, a parameter of cnt is an amount of kicks from 1 to 10\nidle is a filter of idle that kick kick for silence in conference after N seconds, N = setting time in seconds.', 'filt [filt] [mode] [status]', ['filt len 1', 'filt len 0','filt fly mode ban'])

register_stage1_init(get_order_cfg)
register_stage2_init(order_check_idle)
Zuletzt geändert von Anonymous am Freitag 22. Oktober 2010, 13:09, insgesamt 2-mal geändert.
Grund: BBCode aktiviert damit Quelltext lesbarer gesetzt wird.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Mh, sehr unübersichtlich das Script und ziemlich lang um da mal was schnell zu finden.

Aber ohne mir dein Script jetzt anzusehen, wenn du ihn wirklich nur "stumm" schalten willst, dann brauchst du enweder den Nutzer-Name/IP-Adresse oder irgendeine andere Art der Identifizierung.
Dann kannst du bei einem einfachen Server - Client Prinzip einfach eine liste mit gesperrten IP/Name/ID erstellen und bei jedem "horchen" des Servers über diese Liste prüfen ob der jenige gesperrt ist und dann die Message einfach ignorieren.

btw nehm bitte \

Code: Alles auswählen

...\[/code\]- tags
\ - rausnehmen mir ist nur gerade nichst besseres eingefallen um das zuzeigen
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
myromiles
User
Beiträge: 4
Registriert: Freitag 22. Oktober 2010, 10:57

es ist n jabber chatbot stumm schalten tut er die user automatisch das geht ich will das der bot den usern ne nachricht schreibt wenn sie wieder im channel sind..


code ist vom order_plugin.py das woort filter verwaltet leute kickt die
bestimmte worte schreiben und sie dann stumm schaltet
Zuletzt geändert von myromiles am Freitag 22. Oktober 2010, 11:44, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Xynon1 hat geschrieben:\ - rausnehmen mir ist nur gerade nichst besseres eingefallen um das zuzeigen
Du kannst BBCode ausschalten.

@OP: Fuer den Fall, dass du jemanden suchst, der dir das (umsonst) implementiert bist du hier falsch, dafuer ist der Code zu gross und zu unuebersichtlich.* Wenn du aber konkrete Fragen stellst wird man dir hier gerne helfen.

P.S. Willkommen im Forum.

* Es sei denn du hast Glueck.
myromiles
User
Beiträge: 4
Registriert: Freitag 22. Oktober 2010, 10:57

ja verstehe
ich wollt wissen wie ich es schaffe das der bot den stumm geschalteten user noch ne nachricht in den raum sendet
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

myromiles hat geschrieben: es ist n jabber chatbot stumm schalten tut er die user automatisch das geht ich will das der bot den usern ne nachricht schreibt wenn sie wieder im channel sind..
Dann hast du doch schon irgendwo eine Liste mit gesperrten ids.
Du musst doch nur Überprüfen ob diese sich ändert, bzw. wenn der User wieder freigeschalten wird einfach dich an die Funktion mit dran hängst.
Es gibt da bestimmt einige Möglichkeiten wie du darauf zugreifen kannst.
Ansonsten hat cofi recht, ich werde mir jedenfalls nicht den gesamten Quelltext durchlesen.

@cofi
Danke hatte ich übersehen
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

myromiles hat geschrieben:ja verstehe
ich wollt wissen wie ich es schaffe das der bot den stumm geschalteten user noch ne nachricht in den raum sendet
Das Problem ist hier dass der Code von jemanden geschrieben wurde der gerade so in der Lage ist Code in den Editor zu rotzen ohne dass dieser nach 3sek ausführen aka testen mit einer Exception versagt. Es dürfte sicherlich eine Stunde dauern mit Wissen über das Protokoll um das Verhalten zu ändern. Bei so einer Code Qualität macht man dass noch nichtmal gegen Bezahlung wenn man die Wahl hat.
myromiles
User
Beiträge: 4
Registriert: Freitag 22. Oktober 2010, 10:57

naja es funktioniert alles... wollte es nur erweitern wusst nicht das es so uebel ..
macht eigentlich was es soll
wollte da durch einen einstieg in python finden
hab halt keine ahnung danke trotzdem
war echt lehrreich :(
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Als Einstieg in Python ist das leider ungeeignet. Jemand, der nicht kompolett masochistisch veranlagt ist, würde eher den Code komplett neu schreiben als auch nur ein Zeichen davon zu ändern (weil dann vermutlich gar nichts mehr läuft).
Zum Einstieg empfiehlt sich zunächst ein Ausflug ins Tutorial. :)
Antworten