Content deleted Content added
Updating source) (bot |
m Replaced deprecated <source> tags with <syntaxhighlight> |
||
(29 intermediate revisions by 5 users not shown) | |||
Line 1:
Source as of
== Sandbot1.py ==
Line 17:
If the template is present, it does nothing.
<
#!/
# -*- coding: utf-8 -*-
# LGPLv2+ license, look it up
import sys
import os
import ceterach
import passwords
import mwparserfromhell as mwparser
builtins.print = lambda *args, **kwargs: None
def main():
global api
api = ceterach.api.MediaWiki("
api.login("Lowercase sigmabot II",
api.set_token("edit")
bot = SandBot1(api)
bot.run()
Line 37 ⟶ 43:
class SandBot1:
REINSERT = "{{Please leave this line alone (SB)}}\n\n"
SANDBOXES =
"Wikipedia:Tutorial/Editing/sandbox",
"Wikipedia:Tutorial/Formatting/sandbox",
Line 43 ⟶ 49:
"Wikipedia:Tutorial/Citing sources/sandbox",
"Wikipedia:Tutorial/Keep in mind/sandbox"
TEMPLATES =
"Template:Sandbox heading/noedit",
"Template:Sandbox header (do not remove)",
"Template:PLTLA (SH)",
"Template:Please leave this line alone (sandbox heading)",
"Template:Sandbox heading"
def __init__(self, api, shutoff="User:Lowercase sigmabot II/Shutoff"):
self.api = api
self.shutoff_page = api.page(shutoff)
Line 57 ⟶ 64:
@property
def is_allowed(self):
return self.shutoff_page.content.lower() == "true" #or True
tl = tuple(self.api.prop(500, "templates", tlnamespace=10, titles=page))▼
return▼
yield self.api.page(x["title"])▼
def check_if_heading_is_gone(self, box):
▲ tl =
return not res & self.TEMPLATES
def run(self):
Line 74 ⟶ 75:
return
for sandbox in self.SANDBOXES:
print(sandbox)▼
box = self.api.page(sandbox)
if box.revision_user.name == "Lowercase sigmabot II":
continue
if self.check_if_heading_is_gone(box
box.prepend(self.REINSERT, summary="Reinserting sandbox header) (bot", bot=True)
print("\thad a header reinserted!")
Line 84:
if __name__ == "__main__":
main()
</syntaxhighlight>
== Sandbot2.py ==
Line 99 ⟶ 98:
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■--></pre>
<
#!/
# -*- coding: utf-8 -*-
# LGPLv2+ license, look it up
▲import datetime
import time
import os
import sys
import pickle
import threading
import arrow
import ceterach
import passwords
reset_text =
tpl_reset_text = "{{subst:Template sandbox reset}}"
def main():
global api
api = ceterach.api.MediaWiki("
with open("opener.pkl", 'rb') as fp:
api.login("Lowercase sigmabot II", ceterach.passwords.lcsb2)▼
api.opener = pickle.load(fp)
bot = SandBot2(api)
bot.run()
Line 133:
"Wikipedia:Tutorial/Keep in mind/sandbox"
)
SANDBOXES = {"Wikipedia:Sandbox",
"Wikipedia:Tutorial/Editing/sandbox",
"Wikipedia:Tutorial/Formatting/sandbox",
"Wikipedia:Tutorial/Wikipedia links/sandbox",
"Wikipedia:Tutorial/Citing sources/sandbox",
"Wikipedia:Tutorial/Keep in mind/sandbox",
"Wikipedia talk:Tutorial/Editing/sandbox",
"Wikipedia talk:Tutorial/Formatting/sandbox",
"Wikipedia talk:Tutorial/Wikipedia links/sandbox",
"Wikipedia talk:Tutorial/Citing sources/sandbox",
"Wikipedia talk:Tutorial/Keep in mind/sandbox",
"Template:Template sandbox",
}
def __init__(self, api, shutoff="User:Lowercase sigmabot II/Shutoff"):
self.api = api
self.shutoff_page = api.page(shutoff)
@property
Line 144 ⟶ 159:
def wait(self, box):
for __ in range(3):
# Sleep for 3 minutes
print("3 minute sleep on {!r}".format(box.title))
time.sleep(60 * 3)
if self.box_needs_reset(box):
Line 149 ⟶ 166:
# After the bot sleeps on this box for 9 minutes, it
# will clear the box regardless.
print("Done with sleeping, clearing {!r}".format(box.title))
box.edit(reset_text, "Clearing sandbox) (bot", bot=True, force=True)▼
text = tpl_reset_text if box.namespace == 10 else reset_text
def parse_date(self, date):
return
def box_needs_reset(self, box):
now =
three_min =
# there's probably a way to use MediaWiki.iterator(), but too lazy
str_stamp = next(iter(res["query"]["pages"].values()))["revisions"][0]["timestamp"]
return (box_stamp < now - three_min)▼
box_stamp = self.parse_date(str_stamp)
return False
def run(self):
if not self.is_allowed:
print("Check the shutoff page")
▲ return
for sandbox in self.SANDBOXES:
box = self.api.page(sandbox)
if box.revision_user.name
box.content == reset_text:
continue
if self.box_needs_reset(box):
print("
print(box.edit(reset_text, "Clearing sandbox) (bot", bot=True, force=True))
if os.fork() == 0: # Child process▼
▲ self.wait(box)
▲ os._exit(0)
else:
# while the child process waits 3 to 9 minutes
# self.wait(box) # Wait takes place in the child process
# os._exit(0) # Exit the child process
threading.Thread(target=self.wait, args=(box,)).start()
if __name__ == "__main__":
main()
</syntaxhighlight>
|