User:SebBOT/Filters
How to disable a filter
If the bot is malfunctioning, chances are that the problem lies in one of these blocks of code. Thus, instead of shutting down the whole bot, it would be wiser to disable only the chunk of code that is misbehaving. To make the bot ignore a certain line, add a "#" in front of it:
# This line will be ignored
If there are multiple lines, wrap them inside triple-quotes (you still need to put the two spaces at the beginning of the line):
"""This line will be ignored and this one as well and this one is cake and the previous one was a lie but it was still ignored"""
If all else fails, you can simply delete the block from the page. The bot can't come up with code by itself yet, so it won't run anything. Or, if the problem really is elsewhere, block the bot.
Contents
Page filters
addPageFilter(r'^user:', r'(?:talk|help|wiki|template):')
Link filters
Category removal on pages using {{Item infobox}}
def removeCategory(l, **kwargs):
catsToRemove = [u'Category:Weapons', u'Category:Hats', u'Category:Primary weapons', u'Category:Secondary weapons', u'Category:Melee weapons', u'Category:PDA1 weapons', u'Category:PDA2 weapons', u'Category:Miscellaneous items', u'Category:Tools', u'Category:Action items', u'Category:Taunts', u'Community-contributed items']
regLang = compileRegex('/[^/]+$')
if 'article' not in kwargs or regLang.sub(u, l.getLink()) not in catsToRemove:
return l
if u'Category:Item infobox usage' not in kwargs['article'].getCategories():
return l
return None
addLinkFilter(removeCategory)
Template filters
Manage all {{Item infobox}}es
def infoboxFilter(t, **kwargs):
filteredTemplates = ('weapon infobox', 'hat infobox', 'tool infobox', 'item infobox') # Only do stuff to these templates
if t.getName().lower() not in filteredTemplates:
return t # Skip
t.setName('Item infobox')
t.indentationMatters(True) # Reindents every time, not only when modifying values
paramAliases = { # Parameter alias 'goodParam': 'badParam', or 'goodParam': [list of bad params].
'name': ['weapon-name-override', 'hat-name-override', 'tool-name-override', 'NAME', 'name-override'],
'image': ['weapon-image', 'hat-image', 'tool-image'],
'kill-text-1': 'kill-text',
'team-colors': 'has-team-colors',
'two-models': 'has-two-models',
'slot': ['weapon-slot', 'hat-slot', 'tool-slot'],
'trade': 'tradable',
'gift': 'giftable',
'craft': 'craftable',
'paint': ['paintable', 'Paint'],
'rename': ['name-tag', 'nametag'],
'loadout': 'display-loadout-stats',
'level': 'level-and-type'
}
catstoCheck = { # Mapping 'templateAttribute': [List of 'Category|templateAttributeValue']
'type': ['Taunts|taunt', 'Action items|action', 'Hats|hat', 'Miscellaneous items|misc item', 'Tools|tools', 'Weapons|weapon'],
'slot': ['Primary weapons|primary', 'Secondary weapons|secondary', 'Melee weapons|melee', 'PDA1 weapons|pda 1', 'PDA2 weapons|pda 2']
}
catsDontCheck = [u'Category:Beta and unused content', 'Category:Taunts'] # Type and slot won't be modified on these pages
preferedOrder = [ # Prefered order of keys inside template
'name', 'game', 'type', 'beta', 'unused', 'image', 'imagewidth', 'team-colors', 'two-models', 'skin-image-red', 'skin-image-blu', 'TFC-model', 'QTF-model', 'kill-icon-#', 'kill-text-#', 'used-by', 'slot', 'crafting-slot', 'custom-slot', 'contributed-by', 'released', 'availability', 'trade', 'gift', 'craft', 'numbered', 'paint', 'rename', 'medieval', 'ammo-loaded', 'ammo-carried', 'ammo-type', 'show-ammo', 'reload', 'loadout', 'loadout-prefix', 'quality', 'level', '%ATTRIBUTES%', 'item-description', 'item-uses', 'item-flags', 'item-expiration'
]
checkEnglish = ['trade', 'craft', 'paint', 'rename'] # If these attributes aren't yes or no, check the values on the english page
attributeTypes = ['neutral', 'positive', 'negative'] # Possible loadout attribute types
regLang = compileRegex('/[^/]+$')
# Step 0 - Check categories:
tCats = None
isTFC = False # Assume false by default
if 'article' in kwargs:
if kwargs['article'] is not None:
cats2 = kwargs['article'].getCategories()
tCats = []
for c in cats2:
tCats.append(u(regLang.sub(u, u(c))))
isTFC = u'Category:Weapons (Classic)' in tCats
# Step 1 - Rename obsolete attributes
for p in paramAliases:
if type(paramAliases[p]) is type([]):
for a in paramAliases[p]:
t.renameParam(a, p)
else:
t.renameParam(paramAliases[p], p)
# Step 2 - Fix ammo stuff
if t.getParam('ammo-carried') == u'1' or t.getParam('ammo-loaded') == u'1':
t.delParam('ammo-loaded', 'ammo-carried', 'ammo-type')
t.setParam('show-ammo', 'off')
# Step 3 - Fix more ammo stuff, delete pricing attributes
t.delParam('ammo', 'price', 'show-price', 'purchasable', 'backpack-image')
# Step 4 - Fix reload stuff
if t.getParam('reload') is None:
t.renameParam('reload-type', 'reload')
# Step 5 - Count, split, order and fix loadout attributes
attrNumber = 1
regexAttrSplit = compileRegex(r'\s*<br[^<>]*>\s*')
for a in attributeTypes:
if t.getParam(a + '-attributes') is not None:
attrs = regexAttrSplit.split(t.getParam(a + '-attributes'))
for attr in attrs:
t.setParam('att-' + str(attrNumber) + '-' + a, attr)
attrNumber += 1
t.delParam(a + '-attributes')
if tCats is not None:
# Step 6 - Lookup english fallback on certain attributes
fetchEnglish = False
values = {}
for attr in checkEnglish:
if t.getParam(attr) is not None and t.getParam(attr).lower() not in (u'yes', u'no'):
fetchEnglish = True
elif t.getParam(attr) is not None:
values[attr] = t.getParam(attr).lower()
if regLang.search(kwargs['article'].title):
englishArticle = page(regLang.sub(, kwargs['article'].title))
try:
englishContent = englishArticle.getWikiText()
except:
englishContent = u
englishContent, englishTemplates = templateExtract(englishContent)
for englishT in englishTemplates:
if englishT.getName().lower() in filteredTemplates:
for p in paramAliases:
if type(paramAliases[p]) is type([]):
for a in paramAliases[p]:
englishT.renameParam(a, p)
else:
englishT.renameParam(paramAliases[p], p)
for attr in checkEnglish:
if englishT.getParam(attr) is not None and englishT.getParam(attr).lower() in (u'yes', u'no'):
values[attr] = englishT.getParam(attr).lower()
break
for attr in values:
t.setParam(attr, values[attr])
checkCats = True
for c in catsDontCheck:
if c in tCats:
checkCats = False
break
if not isTFC and not t.getParam('custom-slot') and checkCats:
# Step 7 - Set certains attributes based on page categories
for cname in catstoCheck:
cname = u(cname)
found = None
foundmultiple = False
for c in catstoCheck[cname]:
cat, val = u(c).split(u'|')
cat = u'Category:' + u(regLang.sub(u, cat))
if cat in tCats:
if found is not None:
foundmultiple = True
found = val
if not foundmultiple:
t.setParam(cname, found)
if u'Category:Weapons' not in tCats:
t.delParam('slot')
# Step 8 - Convert neutral attributes - Disabled
"""desc = []
if t.getParam('item-description') is not None:
desc = regexAttrSplit.split(t.getParam('item-description'))
for i in range(1, 10):
if t.getParam('att-' + str(i) + '-neutral') is not None:
desc.append(t.getParam('att-' + str(i) + '-neutral'))
t.delParam('att-' + str(i) + '-neutral')
desc2 = []
for d in desc:
if d.strip():
desc2.append(d.strip())
if len(desc2):
t.setParam('item-description', u'
'.join(desc2))"""
#
# Commenting out because of new parameter 'beta'
# and there being no way to distinguish between beta items & unused content thus far
# seb26 04:58, 12 February 2011 (UTC)
#
# if u'Category:Beta and unused content' in tCats:
# t.setParam('unused', 'yes')
# Step 9 - Do TFC stuff
if isTFC:
t.setParam('type', 'weapon')
t.setParam('game', 'tfc')
# Step 10 - Set correct preferred indentation
for k in ['quality', 'level', 'item-description', 'item-uses', 'item-flags', 'level-and-type', 'loadout-name', 'loadout-prefix']:
t.setPreferedIndentation(k, 2)
for i in range(1, 10):
for a in attributeTypes:
t.setPreferedIndentation('att-' + str(i) + '-' + a, 2)
# Step 11 - Build correct attribute order
newOrder = []
for o in preferedOrder:
if o.find('#') == -1:
newOrder.append(o)
continue
if o == '%ATTRIBUTES%':
for i in range(1, 10):
for a in attributeTypes:
newOrder.append('att-' + str(i) + '-' + a)
for i in range(1, 10):
newOrder.append(o.replace('#', str(i)))
t.setPreferedOrder(newOrder)
# Step 12 - There is no step 12
return t
addTemplateFilter(infoboxFilter)