Seite 1 von 1

chatbot

Verfasst: Freitag 22. Oktober 2010, 11:15
von myromiles
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)

Re: chatbot

Verfasst: Freitag 22. Oktober 2010, 11:29
von Xynon1
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

Re: chatbot

Verfasst: Freitag 22. Oktober 2010, 11:41
von myromiles
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

Re: chatbot

Verfasst: Freitag 22. Oktober 2010, 11:43
von cofi
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.

Re: chatbot

Verfasst: Freitag 22. Oktober 2010, 11:49
von myromiles
ja verstehe
ich wollt wissen wie ich es schaffe das der bot den stumm geschalteten user noch ne nachricht in den raum sendet

Re: chatbot

Verfasst: Freitag 22. Oktober 2010, 11:53
von Xynon1
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

Re: chatbot

Verfasst: Freitag 22. Oktober 2010, 11:59
von DasIch
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.

Re: chatbot

Verfasst: Freitag 22. Oktober 2010, 12:08
von myromiles
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 :(

Re: chatbot

Verfasst: Samstag 23. Oktober 2010, 10:24
von mkesper
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. :)